尝试在同样构建为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):错误C4611:&#39; _setjmp&#39;之间的交互和C ++对象销毁是不可移植的
这似乎是一个非常有用的警告 - 如果它警告我跨越C ++析构函数代码。但这是一种POD类型。不应该有任何析构函数代码。
我在这里遗漏了什么,或者他们是否将这个警告搞砸到了基本上#34;你在C ++程序中使用了setjmp&#34;?
答案 0 :(得分:1)
他们是否将这个警告搞砸到基本上是“你在C ++程序中使用了setjmp”?
看起来就是这样。
我可能会把它归类为一个bug,我自己。但是在Microsoft网站上make a suggestion更容易。建议可以投票,那里......