与 #endif 位于同一行的语句的编译器警告

Compiler warning for statement on same line as #endif

考虑代码:

#include <stdio.h>

int main() {
    int a = 4;
#if 1
    printf("Hello world\n");
#endif a++;
    printf("a is %d\n", a);
}

无意中,语句 a++;#endif 在同一行,因此未被计算。结果,最终输出为:

Hello world
a is 4

在 x86-64 clang 12 上,这被捕获为使用选项 -Wextra-tokens 的警告。参见 here

我尝试在 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 

编译时没有任何警告。是否有可以传递给 MSVC 中检测额外标记的编译器的设置?


编辑添加:

正如用户 Nathan Pierson 的回答,确实是选项 /Za 起作用了。它似乎没有默认打开。我也无法使用 Visual Studio 项目属性对话框找出要设置的选项。然而,您可以手动输入额外的选项:

有编译器警告 C4067。看起来您需要设置标志 /Za 才能将其应用于 #endif 指令。

在 Visual Studio 属性页面中,此标志由 C/C++ 部分的语言子部分中的“禁用语言扩展”设置控制。