C - Объявление переменной в случае, если условие доступно в остальном? - PullRequest
0 голосов
/ 01 мая 2020

Если я объявляю переменную в условии if в C, доступна ли эта переменная для ветви else? Например:

if((int x = 0)){
  foo();
} else{
  x++;
  bar(x);
}

Не смог найти ответ, по крайней мере, так, как я его сформулировал. Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 01 мая 2020

Нельзя объявить переменную в условии if в C ...

Объявить переменную в операторе if (ANSI C)

Если вы объявляете внутри области if, например:

if(something){
  int x = 0;
} else{
  x++; // will cause a compilation error
  bar(x);
}

x в 'else' не объявлено, поскольку в C локальная переменная может использоваться только операторами, содержащимися в блок кода, где они объявлены.

1 голос
/ 01 мая 2020

Вы не можете объявить переменную, подобную этой

 if((int a = 0))

Компилятор не разрешает выполнение кода, и вы получаете сообщение об ошибке

, и если вы попробуете это

if(something_that_is_false){
        int a = 12;
    }
    else{
        do_something;
    }

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

Предупреждение: вы можете использовать этот код и работает без ошибок

int a;
    if(a=0){
         printf("True");
    }
    else{
        printf("False");
    }

и вы увидите «Ложь» на экране, потому что это похоже на запись

if(0) // and its false!

, а для последних

int a;
    if(a=0){
         printf("True");
    }
    else{
        printf("False");
    }

вы увидите «Правда» на экране, потому что это похоже на запись

if (5) // истинно любое число, отличное от нуля!

0 голосов
/ 01 мая 2020

Результат эксперимента: нельзя объявить переменные в условиях if. Не будет компилироваться

...