Когда мы не даем значение в макроподстановке.Значение макроса не определено
#define YES
printf("%d",YES)
Значение YES не указано, по умолчанию 0 или мусор?
Когда мы не даем значение в макроподстановке.Значение макроса не определено
#define YES
printf("%d",YES)
Значение YES не указано, по умолчанию 0 или мусор?
Вы только что определили ДА для ничего. Таким образом, программа результата после препроцессора должна быть printf("%d",)
Ни то, ни другое не имеет значения.
Такое использование, как правило, полезно в таких ситуациях:
#define _VXWORKS
Позже, проверьте, если макрос был определен.
#ifdef _VXWORKS
//do something
#else
//do something else
#endif
ничего
вы бы использовать GCC: Вы можете найти, чтобы это нравится: gcc prog.c -E -P
Я был бы удивлен, что он компилирует
В коде поражающего компилятора
printf("%d",)
!!
Препроцессор C работает на токены. Определение макроса для YES
говорит, чтобы заменить токен YES без токена, эффективно удалив токен YES. Таким образом, результат после замены макроса
printf ("%d",)
который является синтаксической ошибкой, как вы заметили.
В отличие от неинициализированных автоматических переменных, замены макросов всегда хорошо определены, поэтому вы не можете иметь неопределенные значения («мусор») в результате расширения макросов.
Не было '' 'в сообщении! –
Почему бы не попробовать компилировать его и выяснить сами? –
@PaulR Поскольку программирование путем экспериментирования с реализацией не может дать окончательного ответа. Возможно, акаш надеется, что кто-то цитирует главу и стих из более авторитетного документа. – Jens
@Jens: это может быть правдой во многих случаях, например. для неопределенного поведения, но в этом случае результирующая ошибка компилятора ответит на вопрос решительно и детерминистически. –