在禁用SDL检查的发布配置中编译以下代码:
1>------ Rebuild All started: Project: pragmatic, Configuration: Release Win32 ------
1> main.cpp
1> Generating code
1>e:\projects\pragmatic\pragmatic\main.cpp(10): warning C4700: uninitialized local variable 'x' used
1>e:\projects\pragmatic\pragmatic\main.cpp(10): warning C4700: uninitialized local variable 'x' used
1>e:\projects\pragmatic\pragmatic\main.cpp(10): warning C4700: uninitialized local variable 'x' used
1>e:\projects\pragmatic\pragmatic\main.cpp(10): warning C4700: uninitialized local variable 'x' used
1>e:\projects\pragmatic\pragmatic\main.cpp(10): warning C4700: uninitialized local variable 'x' used
1> Finished generating code
1> pragmatic.vcxproj -> E:\Projects\pragmatic\Release\pragmatic.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
提供以下输出:
class ProfileViewModel {
public string FirstName { get; set; }
public string LastName { get; set; }
(...)
}
在这种情况下,为什么编译器会忽略我的#pragma。我过去成功地使用这种方法来抑制相同的警告代码。
答案 0 :(得分:2)
我从https://msdn.microsoft.com/en-us/library/2c8f766e.aspx
复制了此内容对于4700-4999范围内的警告编号(与代码生成相关的编号),编译器遇到函数的开括号时生效的警告状态将对函数的其余部分生效。使用函数中的警告编译指示来更改数字大于4699的警告的状态仅在函数结束后生效。以下示例显示警告编译指示的正确放置,以禁用代码生成警告消息,然后还原它。
所以你可能需要在main
开始之前放置编译指示,或者可能在lambda工作之前,但我不确定。