Почему оператор IF выполняется сам по себе

x = 5;
Serial.println (x);

if (x == 0);
    {
      //что-то в этом ЕСЛИ продолжает происходить почему?
      //Я слишком глуп?
    }

, 👍0

Обсуждение

оператор if должен быть выполнен для оценки условия. если условие истинно, выполняется следующая команда или блок команд. ваша команда после if равна ; (пустая команда), @Juraj


1 ответ


3

У вас неправильная точка с запятой.

Разбивая код на конце операторов, вы получаете:

1. x = 5; 
2. Serial.println (x);
3. if (x == 0);
4. { // материал }

Точка с запятой после if завершает if перед открывающим блоком {, и этот блок становится совершенно отдельным оператором отделен от if.

,

Да, большинство из нас были укушены этим. Я бы хотел, чтобы компиляторы C/C++ помечали эту форму if (condition); предупреждением, так как это, скорее всего, ошибка и, безусловно, является плохой практикой кодирования, даже если это сделано намеренно. (То же самое и с if (a=b). Допустимо, но плохая практика.), @Duncan C

@DuncanC Они могут. GCC имеет флаг -Wempty-body: «Предупреждать, если в операторах «if», «else» или «do while» встречается пустое тело. Это предупреждение также включается с помощью -Wextra»., @Majenko

Он должен быть включен по умолчанию., @Duncan C

Черт, я бы даже сказал, что это следует пометить как ошибку. Любой, кто намеренно пишет утверждение «если» «только побочный эффект», должен быть расстрелян. :), @Duncan C

Вы можете включить его в настройках Aduino IDE. /home/matt/Arduino/sketch_mar30a/sketch_mar30a.ino:5:14: предупреждение: предложите скобки вокруг пустого тела в операторе 'if' [-Wempty-body], @Majenko