Является ли стандартным для #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?
Ответы
Ответ 1
Да, это указано стандартом в 6.10.1:
После того, как все замены из-за расширения макросов и определенного унарного оператора выполнены, все остальные идентификаторы (включая те, которые лексически идентичны ключевым словам) заменяются на pp-число 0
Ответ 2
Это значение по умолчанию, но вы можете хотя бы генерировать предупреждения для этого, используя параметр -Wundef
для gcc.
`-Wundef ': Предупреждать, когда идентификатор, который не является макросом, встречается в директива `#if ', за пределами` defined'. Такие идентификаторы заменен на нуль.