Try*_*yer 6 c++ visual-studio visual-c++
考虑代码:
#include <stdio.h>
int main() {
int a = 4;
#if 1
printf("Hello world\n");
#endif a++;
printf("a is %d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
不经意间,statementa++;
与 a 位于同一行,#endif
并且不被求值。结果,最终的输出是:
Hello world
a is 4
Run Code Online (Sandbox Code Playgroud)
在 x86-64 clang 12 上,这是使用 using option 捕获的警告-Wextra-tokens
。看这里。
我尝试在 Visual Studio 2019 MSVC 上使用命令行选项进行编译:
/JMC /permissive- /ifcOutput "Debug\" /GS /analyze- /W3 /Zc:wchar_t /I"../include/" /ZI /Gm- /Od /sdl /Fd"Debug\vc142.pdb" /Zc:inline /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /FC /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\windows.pch" /diagnostics:column
Run Code Online (Sandbox Code Playgroud)
编译时没有任何类型的警告。是否有一个设置可以传递给 MSVC 中的编译器来检测额外的标记?
编辑添加:
正如用户Nathan Pierson所回答的,这确实是一个/Za
有效的选项。默认情况下似乎没有开启。我也无法使用 Visual Studio 项目属性对话框来查找要设置的选项。然而,人们可以手动输入额外的选项,如下所示:
/Za
ETA:不建议使用