给定一个 C++11 编译器,#error它最终应该使用哪个正确的编译器?
// no #includes!
#define SOMEMACRO true
#if SOMEMACRO
#error "it was true"
#else
#error "it was false"
#endif
Run Code Online (Sandbox Code Playgroud)
显然我#error只是作为测试使用。我知道true并false以适当的语言定义,但这是预处理器上下文。在 C99 中,它似乎不被预处理器识别。
我问是因为似乎我尝试过的所有编译器都将其视为“真”,而静态代码分析工具坚持认为true未定义,隐含错误并以“它是假的”结束。
使用类似的声明时#if TRUE,我应该发生什么?非常感谢您的解释!我理解#if 1它是如何工作的,但它在我的代码中给出了完全不同的结果而不是使用#if TRUE.我理解#if是条件指令,这意味着什么; 它只是我不理解的TRUE(或FALSE)部分.似乎以这种方式使用它从不执行语句后面的代码.这是一个例子:
#if TRUE
cout << "true" << endl;
#endif
#if FALSE
cout << "false" << endl;
#endif
Run Code Online (Sandbox Code Playgroud)
我似乎永远不会在屏幕上看到"true"或"false",并且使用Visual Studio,内部语句会自动显示为灰色.
c++ compiler-directives visual-studio visual-c++ c-preprocessor