#if 有未定义的变量也能编译通过!?

#include

//DSGFJSJH

//#define SS() 1

int main()
{
#if kfgkasfga
printf("==========\n");
#endif

#if !(SS)
printf("aaaaaaaaaa\n");
#endif
return 1;
}

上面这段程序,最终编译通过,没有警告(gcc -Wall),输出了aaaaaaaaaa
所以#if 到底把那些混乱的字符当作了什么?0?要是不小心写错了变量名,
编译又不报错,那不是悲剧了?

如果未定义的话,默认为FALSE

定义一个未初始化的变量,早起的编译器会自动赋一个初值,所以不会警告报错