以下代码能够在Linux下工作,但在MSVS下会出错
#if (false)
....
#endif
错误是:致命错误 C1017:无效的整数常量表达式
我在微软网站上找到了这份报告: http://msdn.microsoft.com/en-us/library/h5sh3k99.aspx 虽然与我的情况有点不同,因为我没有使用“#define”。
所以我的问题是:
1. 有没有办法在不改变代码的情况下使其适用于MSVC? 2. 如果必须更新代码,对于这种情况,最好的解决方案是什么?
以下代码能够在Linux下工作,但在MSVS下会出错
#if (false)
....
#endif
看起来你的MS编译器版本不支持false作为内置常量。这并不奇怪,因为微软在支持C和C ++标准方面记录不佳。
使其正常工作的一种方法是,在不更改代码的情况下向编译器传递命令行参数,将false定义为0,true定义为1:
-Dfalse=0 -Dtrue=1
true
和false
定义为宏也未被标准定义:标准没有描述在不符合标准的实现上程序的行为。这是选择较小恶的问题。 - user743382-Dfalse=(!1)
和-Dtrue=(!0)
,以支持typeid
和重载解析。此外,现代Visual C++的一些系统头文件会检查关键字是否已定义。这需要禁用。 - Cheers and hth. - Alf
false
或其他关键字的存在 - 这些是给编译器用的。预处理器只知道宏名称和文字常量。将其改为#if 0
。 - Igor Tandetnikfalse
是C++中的一个关键字,但在Phase 4期间却不是,引用标准来说,“所有标识符都是或不是宏名称 - 没有关键字、枚举常量等”。 - H Waltersdefined
一元运算符的所有替换后,所有剩余的标识符和关键字,**除了true
和false
**之外,都将被替换为pp-number0
,然后每个预处理记号都会转换成一个令牌。”然后就像在#if
表达式之外一样,将pp-token转换为令牌。 - user743382