Как C выполняет свой оператор IF? - PullRequest
2 голосов
/ 09 апреля 2011

В языке программирования C нет типа boolean, но тогда как язык C превращает IF/Else в true и false?

Что происходит за кадром?

Ответы [ 3 ]

6 голосов
/ 09 апреля 2011

Компилятор не преобразует условное выражение в логическое значение, пока не решит, какую ветвь оператора if / else следует взять. Вместо этого он генерирует инструкции на ассемблере, как если бы вы написали программу на ассемблере.

Простой пример:

if (x > y)
{
   // Do something
}
else
{
   // Do something else
}

Можно перевести на (используя фиктивный микроконтроллер):

    CMP R12,R13
    BLE label1
    // Do something
    JMP label2
label1:
    // Do something else
label2:

Если условие еще проще, например:

if (x)

Язык C будет считать x равным true , если он ненулевой, и false в противном случае.

Если условие содержит операторы || и / или &&, компилятор сгенерирует код, который закроет тест. Другими словами, для выражения x != 0 && a/x == y второй тест даже не будет выполнен, если первый тест неверен. В этом случае это используется для гарантии того, что деление на ноль не выполняется.

4 голосов
/ 09 апреля 2011

Не существует true и false для процессора: только 0 и 1.

В основном, в C:

  • То, что ложно, равно 0 - что процессор может проверить
  • И то, что является истинным, не равно 0 - что также может проверять процессор.
1 голос
/ 09 апреля 2011

для условных выражений ненулевое значение эквивалентно true, а нулевое значение эквивалентно false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...