Запрос, связанный с printf - PullRequest
5 голосов
/ 21 ноября 2011

Вот простая однострочная программа, использующая printf:

void main()

{
printf("%d%d",printf("Cis"),printf("good"));
}

Выход:

goodCis34

Как объяснить этот вывод ??

Ответы [ 5 ]

6 голосов
/ 21 ноября 2011

Причина, по которой good и Cis печатаются первыми, заключается в том, что параметры должны быть оценены до вызова верхнего уровня printf().

Затем возвращаемые значения распечатываются.

Обратите внимание, что C не определяет порядок оценки параметров. В инструкции нет точек последовательности. Поэтому порядок не определен. И результат может появиться в любом порядке. (следовательно, почему в этом случае они выглядят не по порядку)

3 голосов
/ 21 ноября 2011

Printf возвращает количество напечатанных символов.«Cis» - 3 символа, «good» - 4.

Также записывает вывод в поток.

Таким образом, «Cis» печатается и возвращает 3, «good» печатается и возвращает 4. Порядок их выполнения не гарантируется, поэтому не определено, получите ли вы Cisgood."или" goodCis ".

Затем вычисляется внешняя строка printf, и возвращается результат" 34 ".

1 голос
/ 21 ноября 2011
printf("%d%d",printf("Cis"),printf("good"));

Сначала аргументы оцениваются. printf («хорошо») оценивается первым. «хорошо» печатается и возвращается 4 (количество записанных символов). Затем printf ("Cis") оценивается. «Сис» печатается и возвращается 3. после оценки функция становится такой: printf ("% d% d", 3, 4);

Итак, 34 напечатано.

0 голосов
/ 21 ноября 2011

printf и его семейство возвращают количество напечатанных символов. В вашем случае это просто длина струн. Однако порядок с аргументами оценивается не определено. В вашем случае второй аргумент для внешнего printf происходит первым. Это может быть совершенно иначе.

0 голосов
/ 21 ноября 2011

Это оценка справа налево, означающее, что хорошо печатается первым. Затем он оценивает вторую часть, Cis .

Наконец, при выполнении самой левой операции используются соответствующие длины обеих этих строк для заполнения% d замен.

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