Подтвердить что ты не робот

Является ли стандартным для #if принимать символические константы undefined как 0?

В этой программе c

#include<stdio.h>
int main()
{

        #if UnDefinedSymbolicConstant==0
                printf("UnDefinedSymbolicConstant is equal to 0\n ");
        #else
                printf("UnDefinedSymbolicConstant is not equal to 0\n");

        #endif
        return 0;
}

UnDefinedSymbolicConstant не был #define в любом месте, но он принимается как 0 и выдает вывод на gcc-4.3.4 как:

UnDefinedSymbolicConstant is equal to 0

так, Является ли это стандартным поведением или работает так, как в gcc?

4b9b3361

Ответ 1

Да, это указано стандартом в 6.10.1:

После того, как все замены из-за расширения макросов и определенного унарного оператора выполнены, все остальные идентификаторы (включая те, которые лексически идентичны ключевым словам) заменяются на pp-число 0

Ответ 2

Это значение по умолчанию, но вы можете хотя бы генерировать предупреждения для этого, используя параметр -Wundef для gcc.

`-Wundef ': Предупреждать, когда идентификатор, который не является макросом, встречается в  директива `#if ', за пределами` defined'. Такие идентификаторы  заменен на нуль.