小编too*_*ays的帖子

在预处理器条件中使用布尔文字是否有效?

请考虑以下代码,这会导致在true预处理器条件中计算布尔文字:

#define SOME_MACRO true

int main ()
{
#if SOME_MACRO
  return 1;
#else
  return 0;
#endif
}
Run Code Online (Sandbox Code Playgroud)

Clang 3.4和GCC 4.8都接受这个代码,即使是-pedantic -std=c++11 -Wall -Wextra.

Visual Studio 2013拒绝它,致命错误C1017:无效的整数常量表达式.

我对n3376§16.1的解读是,应该应用用于评估常量表达式的常规C++规则.

如果是这样,这段代码是有效的,如果MSVC不接受它,那就是一个错误.

但我没有发现这种标准特别清楚.有人能证实吗?

c++ language-lawyer c-preprocessor

4
推荐指数
1
解决办法
798
查看次数

标签 统计

c++ ×1

c-preprocessor ×1

language-lawyer ×1