为什么下面的代码会编译?
#ifdef C++11
// ...
#endif
int main() {}
gcc 4.8.0 给了我以下警告:
#ifdef 指令末尾的额外标记
根据标准,宏名称只能包含字母、数字和下划线字符。
也许是因为这个?
ISO/IEC 14882:2011
16.1 条件包含 [cpp.cond]
6 按顺序检查每个指令的条件。如果它的计算结果为假(零),则跳过它控制的组:指令仅通过确定指令的名称进行处理,以跟踪嵌套条件的级别;其余指令的预处理标记被忽略,组中的其他预处理标记也是如此。仅处理其控制条件评估为真(非零)的第一组。如果没有一个条件为真,并且有 #else 指令,则处理由 #else 控制的组;如果缺少 #else 指令,则跳过 #endif 之前的所有组。151
我无法正确理解这句话。