Ответ 1
Это поведение undefined, поэтому абсолютно ничего не может произойти.
Локальные переменные могут быть фактически напечатаны, потому что в некоторых системах Xprintf
функции семейства могут выставлять свои аргументы из стека (объекты stdarg.h могут использоваться для реализации таких функций). Ваши переменные a,b,c
могут находиться в ячейке памяти, из которой макрос va_arg
будет извлекать аргументы. Это детали среды реализации/реализации библиотеки и не являются частью стандарта, поэтому они могут варьироваться в зависимости от разных целевых платформ.
Вот цитата из стандарта c99, описывающая функцию fprintf
:
7.19.6.1 Функция fprintf
2/Функция fprintf записывает вывод в поток, на который указывает поток, под управлением строки, на которую указывает формат, который определяет, как последующие аргументы преобразуются для вывода. Если есть недостаточно аргументов для формата, поведение undefined.Если формат исчерпан, пока аргументы остаются, избыток аргументы оцениваются (как всегда), но в противном случае игнорируются. Функция fprintf возвращает, когда конец строки формата встречаются.