Почему программа C дает отличный результат? - программирование

Почему программа C дает отличный результат?

На экзамене я получил вопрос. Вопрос был:

Каким будет вывод следующего кода:

#include<stdio.h>
#include<conio.h>

void main()
{
 int a=5, b=6, c=7;
 printf("%d%d%d");
}

Мой ответ: он даст предупреждение, так как printf не был предоставлен с необходимыми аргументами.
И если вы запустите его, вы получите значения мусора.

Учитель дал мне ноль. По его словам, ответ заключается в том, что значения будут напечатаны в обратном порядке, т.е. выход будет "765".

Ловушка заключается в использовании компилятора Turbo С++, и я обычно использую GCC. Могу ли я получить комментарии и объяснения, чтобы вернуть мои оценки? Или мой ответ действительно неправильный?

4b9b3361

Ответ 1

Это поведение undefined, поэтому абсолютно ничего не может произойти.

Локальные переменные могут быть фактически напечатаны, потому что в некоторых системах Xprintf функции семейства могут выставлять свои аргументы из стека (объекты stdarg.h могут использоваться для реализации таких функций). Ваши переменные a,b,c могут находиться в ячейке памяти, из которой макрос va_arg будет извлекать аргументы. Это детали среды реализации/реализации библиотеки и не являются частью стандарта, поэтому они могут варьироваться в зависимости от разных целевых платформ.

Вот цитата из стандарта c99, описывающая функцию fprintf:

7.19.6.1 Функция fprintf

2/Функция fprintf записывает вывод в поток, на который указывает поток, под управлением строки, на которую указывает формат, который определяет, как последующие аргументы преобразуются для вывода. Если есть недостаточно аргументов для формата, поведение undefined.Если формат исчерпан, пока аргументы остаются, избыток аргументы оцениваются (как всегда), но в противном случае игнорируются. Функция fprintf возвращает, когда конец строки формата встречаются.

Ответ 2

Несоответствие аргументов в printf и отсутствие аргументов (как в этом вопросе)

undefined behaviour

Он может получить garbage или может получить эти значения a,b,c. Он не определяется стандартом языка.