使用 /WX 编译器选项,Visual C++ 不应构建我的程序,但它确实如此
With /WX compiler option, Visual C++ should not build my program, but it does
设置了 /WX 编译器选项后,这段代码应该不会编译,但它会编译:
#include <iostream>
int main()
{
//#pragma warning( disable : 4005 ) // macro redefinition
#define TEST_MACRO 123
std::cout << TEST_MACRO;
#define TEST_MACRO 456
std::cout << TEST_MACRO;
}
这是 Visual C++ 输出:
1>------ Rebuild All started: Project: TestWarningDisable, Configuration: Debug Win32 ------
1>TestWarningDisable.cpp
1>E:\test\TestWarningDisable\TestWarningDisable.cpp(14,1): warning C4005: 'TEST_MACRO': macro redefinition
1>E:\test\TestWarningDisable\TestWarningDisable.cpp(10): message : see previous definition of 'TEST_MACRO'
1>TestWarningDisable.vcxproj -> E:\test\TestWarningDisable\Debug\TestWarningDisable.exe
1>Done building project "TestWarningDisable.vcxproj".
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
为什么警告 C4005 没有转换为错误?
问题出在这里:我为 x64 版本设置了 /WX 选项,但后来我创建了 Win32 版本。
这是一个快速测试项目,奇怪的是 Visual Studio 创建了一个简单的空 Win32 项目,当我更改项目属性时,对话框默认设置为 x64...
设置了 /WX 编译器选项后,这段代码应该不会编译,但它会编译:
#include <iostream>
int main()
{
//#pragma warning( disable : 4005 ) // macro redefinition
#define TEST_MACRO 123
std::cout << TEST_MACRO;
#define TEST_MACRO 456
std::cout << TEST_MACRO;
}
这是 Visual C++ 输出:
1>------ Rebuild All started: Project: TestWarningDisable, Configuration: Debug Win32 ------
1>TestWarningDisable.cpp
1>E:\test\TestWarningDisable\TestWarningDisable.cpp(14,1): warning C4005: 'TEST_MACRO': macro redefinition
1>E:\test\TestWarningDisable\TestWarningDisable.cpp(10): message : see previous definition of 'TEST_MACRO'
1>TestWarningDisable.vcxproj -> E:\test\TestWarningDisable\Debug\TestWarningDisable.exe
1>Done building project "TestWarningDisable.vcxproj".
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
为什么警告 C4005 没有转换为错误?
问题出在这里:我为 x64 版本设置了 /WX 选项,但后来我创建了 Win32 版本。
这是一个快速测试项目,奇怪的是 Visual Studio 创建了一个简单的空 Win32 项目,当我更改项目属性时,对话框默认设置为 x64...