То, если (TRUE) хорошая идея в C?

Решением является использование dplyr::pull в списке-столбце (obj$data):

library(tidyverse)

obj%>%
  pull(data)%>%
  map(~summarise_if(.,is.numeric,sum))

[[1]]
# A tibble: 1 x 6
      V1     V2     V3     V4     V5     V6
   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 12865. 11787. 12864. 13443. 12548. 13170.

[[2]]
# A tibble: 1 x 6
      V1     V2     V3     V4     V5     V6
   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 11655. 12197. 11379. 10023. 10659. 11154.

[[3]]
# A tibble: 1 x 6
     V1    V2    V3    V4    V5    V6
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5175. 6053. 6855. 6130. 6504. 5967.
16
задан user 2 April 2012 в 18:32
поделиться

17 ответов

Вам даже не нужно если оператор. Можно создать блоки с {}

, Который должен, вероятно, быть отдельной функцией как бы то ни было.

Пример здесь:

#include <stdio.h>

int
main(int argc, char **argv) {
    int i = 0;
    {
        int i = 10;
        printf("%d\n", i);
    }
    printf("%d\n", i);
}
51
ответ дан 30 November 2019 в 15:01
поделиться

По-видимому, я нахожусь в меньшинстве, но я нахожу "просто, что фигурные скобки" намного тяжелее читают, потому что оно отклоняется от обычного шаблона. В (по общему признанию нечастых) случаях, где я хочу ограниченный по объему блок, не определяя другую функцию, я предпочитаю включать "если", но без любых макросов и с комментарием для объяснения почему:

if( 1 ) // just to establish scope
{
   // do stuff here
}
1
ответ дан 30 November 2019 в 15:01
поделиться

Предположение, что Вы используете старый компилятор (как я делаю, это для старых аппаратных средств), что Вы пропускаете, если (TRUE) как другие предложили, и что у Вас есть ДЕЙСТВИТЕЛЬНО ОГРОМНАЯ функция (ведьма, которую Вы не должны иметь во-первых), затем я думаю, что это - вид хорошо. Я сделал это, но это не чувствовало себя хорошо...

1
ответ дан 30 November 2019 в 15:01
поделиться

Я думаю, что Вы работаете с некоторыми устаревшими предположениями. Я кодировал прямой C, использующий GCC в течение нескольких месяцев теперь, и Вы не должны объявлять переменные в начале блока, даже при том, что Второй выпуск K& R говорит, что Вы имеете к. Можно объявить переменную где угодно, как подобный этот not-very-useful пример:

char* palstring;
palstring = malloc(LARGEST_STRING);
memset(palstring, 0, sizeof palstring);
fgets(palstring, LARGEST_STRING, fin);

char* cur = palstring;
char letter;
letter = *cur;

, Таким образом, нет никакой потребности сделать то, что Вы предлагаете. Язык шел дальше.

Другое хорошее дополнение к языку C является Массивами Переменной длины, которые позволяют Вам передавать массив функции наряду с ее размером. В былые времена все, что Вы могли сделать, было передать в указателе.

1
ответ дан 30 November 2019 в 15:01
поделиться

C99 позволяет Вам объявлять переменные почти где угодно. Однако рефрен от выполнения его без очень серьезного основания. Попытайтесь сначала разделить свою функцию на меньший (возможно встроенный) функции.

единственное место, где такая вещь могла бы иметь смысл, - когда у Вас есть переменная, которая инициализируется посреди Вашей функции, например, подобная созданию объекта в C++.

1
ответ дан 30 November 2019 в 15:01
поделиться

Просто определите свои переменные в начале блока или используйте другую функцию. Добавление искусственного объема с пустым {} s или любая из альтернатив не является хорошей практикой.

2
ответ дан 30 November 2019 в 15:01
поделиться

Мой ответ следующие:

Это заставляет закаленных программистов съежиться при самой мысли о нем.

2
ответ дан 30 November 2019 в 15:01
поделиться

Я не думаю, что Вам нужно если (истинная) часть.

Просто {} требуются, чтобы определять объем переменных.

2
ответ дан 30 November 2019 в 15:01
поделиться

Отъезд двери открывается для некоторых творческих людей:

#define TRUE 0
#define FALSE 1

Просто используют фигурные скобки для объявления объема.

3
ответ дан 30 November 2019 в 15:01
поделиться

Как столько ответов, уже сказанных, Вам не нужно "если" материал. Просто создайте пустой блок. Но я хочу достигнуть другую точку. В C можно создать объявления переменной где угодно в блоке, не только в запуске. В C89 у Вас было то ограничение. Запуск с C99 (это составляет 10 лет теперь), у Вас больше нет того ограничения, хотя некоторые компиляторы будут стонать так или иначе. GCC не будет, тем не менее, если Вы скажете ему использовать самый "недавний" Стандарт C с-std=c99 опцией.

, поскольку существуют все еще существующие компиляторы, которые стонут по умолчанию, я не предпочел бы смешивать объявления и код все же. Я продолжал бы помещать объявления в начале блоков по причинам совместимости.

4
ответ дан 30 November 2019 в 15:01
поделиться

Можно ли удалить

if(TRUE)

и просто оставить ли фигурные скобки, которые собой определяют новый синтаксический блок - составной оператор .

, Это - определенно инструмент для очистки, чем ложь, если бы Вы имели прежде, но Вы все еще хотели бы спрашивать себя, почему Вы хотите создать новый блок то - было бы лучше определить подпрограмму?

4
ответ дан 30 November 2019 в 15:01
поделиться

В первую очередь, новый блок не должен быть если блок. Это мог просто быть раздел кода, окруженного фигурными скобками, как это:

void foo() {
 ... Do some stuff ...

 {
     char a;
     int b;

     ... Do some more stuff ...
 }

 ... Do even more stuff ...
}
112-секундный из всех, в любом современном компиляторе C, который соответствует стандарту C (я думаю C99), можно объявить переменные где угодно в блоке, таким образом, Вы не должны создавать новый блок вообще.

5
ответ дан 30 November 2019 в 15:01
поделиться

Обратите внимание, что в C99 позволяется объявить локальные переменные посреди блоков.

C99 является версией стандарта C с 1999 года; самые современные компиляторы C поддерживают его.

6
ответ дан 30 November 2019 в 15:01
поделиться

Так как можно просто сделать блок объема без, если, это - лучшая идея.

void foo() {
     ... Do some stuff ...
     {
         char a;
         int b;
         ... Do some more stuff ...
     }
     ... Do even more stuff ...
}
6
ответ дан 30 November 2019 в 15:01
поделиться

Вы, вероятно, хотите создать новую функцию для того объема.
, Если это действительно должно иметь свой собственный объем, это - вероятно, отдельная логическая функция так или иначе.

7
ответ дан 30 November 2019 в 15:01
поделиться

Насколько я знаю, что можно создать объем без если.

Использование просто фигурные скобки как это:

{
    int x;

}

И я рекомендую против

if (TRUE)

, так как это препятствует readibility.

16
ответ дан 30 November 2019 в 15:01
поделиться

Я не назвал бы меня закаленным, но я - вид раболепия.

Моя проблема с ним - то, что, если оператор привел бы кого-то полагать, что что-то на самом деле оценивается..., но во времени выполнения, макрос является любой TRUE или FALSE, нет никакого изменения его являющийся чем-то еще. Необходимо или включать код или нет.

, Если то, что Вы означаете делать, является чем-то как ОТЛАДКА #ifdef затем, что необходимо сделать это, чтобы указать читателю, что это - код отладки...

3
ответ дан 30 November 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: