Зачем printf внутри, если условие работает в c? - PullRequest
0 голосов
/ 24 сентября 2019
if(printf("Hello world")){}

Вывод вышеуказанного кода:

Hello world

Мой друг сказал мне, что функция printf возвращает длину символов, которая здесь не равна нулю, поэтому условие истинно.

Но я не могу понять, почему он выполняет этот оператор printf.Разве printf не должен выполняться, только когда он внутри { }?

Ответы [ 3 ]

6 голосов
/ 24 сентября 2019

выражение в if( выражение ) всегда вычисляется, и в вашем случае это вызов printf.

Значение этого выражения используется, чтобы определить, выполняется ли тело (пустое в вашем случае) if.

0 голосов
/ 26 сентября 2019

Чтобы оценить возвращаемое значение из функции printf(), программа должна выполнить его. Вот почему происходит печать.Он выполняется только для оценки возвращаемого значения.Это часто называют побочным эффектом или побочным эффектом. C допускает любое выражение в тестовой части оператора if, кроме того, которое возвращает void (другой способ сказать нет функции возврата или процедура)

0 голосов
/ 24 сентября 2019
Функция

printf () возвращает количество напечатанных символов.Если при печати возникнет какая-либо ошибка, она вернет отрицательное значение.Посмотрите на этот фрагмент из библиотеки GNU C.

    int
__printf (const char *format, ...)
{
  va_list arg;
  int done;
  va_start (arg, format);
  done = __vfprintf_internal (stdout, format, arg, 0);
  va_end (arg);
  return done;
}

Здесь printf возвращает 11 , поскольку количество напечатанных символов равно 11.

, если (11) равноtrue => Это будет true, так как 11 - положительное целое число, поэтому будет выполнено тело if ().

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