有关setjmp w / POD结构

时间:2017-07-29 02:47:52

标签: c++ visual-studio-2017 compiler-warnings longjmp setjmp

尝试在同样构建为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;?

1 个答案:

答案 0 :(得分:1)

  

他们是否将这个警告搞砸到基本上是“你在C ++程序中使用了setjmp”?

看起来就是这样。

我可能会把它归类为一个bug,我自己。但是在Microsoft网站上make a suggestion更容易。建议可以投票,那里......