Необъявленные макросы в C - PullRequest
0 голосов
/ 10 июня 2018

Этот фрагмент кода работает отлично и выдает выходное значение как 4.

#include<stdio.h>
#if X==5
#define Y 5
#else
#define Y 4
#endif
void main()
{
    printf("%d",Y);
}

В то время как этот фрагмент кода возвращает ошибку «X undeclared».

#include<stdio.h>
#if X==5
#define Y 5
#else
#define Y 4
#endif
void main()
{
    printf("%d",X);
}

Если макросне определено, препроцессор должен присвоить ему значение 0 по умолчанию.Тогда почему я не получаю вывод как '0' во втором куске кода?Если X необъявлено, согласно ошибке, как был успешно скомпилирован необъявленный макрос без каких-либо ошибок в первом фрагменте кода?Пожалуйста, объясните простыми словами.Заранее спасибо.

1 Ответ

0 голосов
/ 10 июня 2018

Потому что после подстановки текста препроцессора X не заменяется, потому что нигде не определено, и вы получите неопределенную ошибку переменной.

Неопределенный символ макроса имеет значение 0 для препроцессора, но тольков условном выражении препроцессора (т. е. #if, #elif), а не в операторе C.

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