Member 14064535 Ответов: 4

Что означает приведенный ниже код на языке Си


Поэтому в основном я ищу объяснение для приведенного ниже вывода кода C,

int a=0,b=1;
если (усилитель&;&амп; ++б)
printf("%d",b);

Что я уже пробовал:

Ответ, который я получил, - 1. Но мой вопрос заключается в том, что здесь используется оператор if. и если мы увеличим b до 2 из 1, то почему он печатает 1... Пожалуйста, помогите мне

4 Ответов

Рейтинг:
20

CPallini

Ричард уже дал тебе правильное решение.
Я бы посоветовал вам сосредоточиться на if заявление, попробуйте

#include <stdio.h>

int main()
{
  int a = 0;
  int b = 1;

  if ( a && ++b)
  {
    printf("non-zero branch\n");
  }
  else
  {
    printf("zero-branch, b =  %d\n", b);
  }
  return 0;
}

Он выводит наружу:
zero-branch, b =  1

Ты видишь b не увеличивается просто потому, что ++b является никогда не казнили.
Потому что, в свою очередь, a является 0, и нет никаких причин продолжать оценку (см., Для лучшей формулировки: Оценка короткого замыкания - Википедия[^]).

Этот C функция используется, например, в таком коде, как
if ( p && p->is_running() )
{
  // do stuff
}

если p является NULL затем p->is_running() не исключается, таким образом предотвращая сбой программы.


Рейтинг:
2

Richard MacCutchan

Вы должны запустить код самостоятельно, и вы увидите, что нет никакого вывода. То if оператор сначала проверяет переменную a а поскольку это ноль, то все выражение будет ложным. А так как это ложь то printf заявление не будет выполнено.


CPallini

5.

Рейтинг:
2

Member 14064535

Я запустил программу onlne on ниже компилятора,

https://www.onlinegdb.com/online_c_compiler

А выход-1. Я согласен с вашей точкой зрения, что утверждение if приведет к ложному результату... Но тогда почему выход 1 ? Вы можете попробовать запустить выше компилятор


Рейтинг:
1

Member 14064535

Большое вам спасибо за объяснение..Я бы тоже сослался на этот сайт !!


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением. НЕ опубликуйте свой ответ как новое "решение".