关于 setjmp w/POD 结构的 MSVC 警告 4611
MSVC warning 4611 regarding setjmp w/POD struct
尝试在也构建为 C++ 的 C 代码库上提高一些警告级别。我正在 Visual Studio 试一试(出于某种原因)。
收到有关 setjmp 交互的警告,尽管没有看到任何相关的析构函数。所以我做了一个测试:
#include <setjmp.h>
struct X { int y; };
int main() {
struct X x;
jmp_buf buf;
if (setjmp(buf) == 0) {
longjmp(buf, 1);
} else {
// whatever.
}
}
在命令行上启用警告:
C:\wherever>cl /we4611 test.cpp
test.cpp
test.cpp(9): error C4611: interaction between '_setjmp' and C++ object destruction is non-portable
这似乎是一个非常有用的警告——如果它是在警告我关于交叉 C++ 析构函数代码的话。但那是 POD 类型。不应该有任何析构函数代码。
我是不是遗漏了什么,还是他们把这个警告搞砸了,以至于基本上 "you used setjmp in a C++ program"?
did they botch this warning to the point of making it basically "you used setjmp in a C++ program"?
看起来是这样。
我自己可能会将其归类为错误。但是在 Microsoft 网站上 make a suggestion 更容易。可以对建议进行表决,有...
尝试在也构建为 C++ 的 C 代码库上提高一些警告级别。我正在 Visual Studio 试一试(出于某种原因)。
收到有关 setjmp 交互的警告,尽管没有看到任何相关的析构函数。所以我做了一个测试:
#include <setjmp.h>
struct X { int y; };
int main() {
struct X x;
jmp_buf buf;
if (setjmp(buf) == 0) {
longjmp(buf, 1);
} else {
// whatever.
}
}
在命令行上启用警告:
C:\wherever>cl /we4611 test.cpp
test.cpp test.cpp(9): error C4611: interaction between '_setjmp' and C++ object destruction is non-portable
这似乎是一个非常有用的警告——如果它是在警告我关于交叉 C++ 析构函数代码的话。但那是 POD 类型。不应该有任何析构函数代码。
我是不是遗漏了什么,还是他们把这个警告搞砸了,以至于基本上 "you used setjmp in a C++ program"?
did they botch this warning to the point of making it basically "you used setjmp in a C++ program"?
看起来是这样。
我自己可能会将其归类为错误。但是在 Microsoft 网站上 make a suggestion 更容易。可以对建议进行表决,有...