【发布时间】:2014-11-16 16:23:21
【问题描述】:
以下代码在 Linux 下运行,但 MSVS 出错
#if (false)
....
#endif
错误是:致命错误C1017:无效的整数常量表达式
我在 Microsoft 的网站上找到了这份报告: http://msdn.microsoft.com/en-us/library/h5sh3k99.aspx
虽然那里描述的信息与我的情况相比略有不同,因为我没有使用“#define”
所以我的问题是:
- 有什么方法可以让它在不更改代码的情况下为 MSVC 工作?
- 如果必须更新代码,这种情况的最佳解决方案是什么?
【问题讨论】:
-
“因为我没有使用“#define””——你包含的任何标题怎么样?如果您不包含任何标题,它是否会以同样的方式失败?
-
预处理器对
false或其他关键字一无所知——这些是用于编译器的。预处理器只知道宏名称和文字。让它#if 0 -
@IgorTandetnik 这对于 C 是正确的,但对于 C++ 是不正确的(这个问题是关于)。
-
@hvd Igor 的评论不是关于 C 中的真实情况,而不是 C++ 中的真实情况。它是关于第 4 阶段的真实情况,而不是第 4 阶段的不真实情况。
false是 C++ 中的关键字,但不是在第 4 阶段,引用标准,“所有标识符要么是宏名称,要么不是宏名称 - - 根本没有关键字、枚举常量等”。 -
@HWalters 这是一个注释。规范性文本明确提出了两个例外:“由于宏扩展和
defined一元运算符的所有替换都已执行,所有剩余的标识符和关键字,除了true和false,替换为pp号0,然后将每个预处理令牌转换为一个令牌。”然后将 pp-token 转换为令牌,就像它在#if表达式之外发生的那样。
标签: c++ visual-studio-2010 macros boolean