给出以下代码:

#include <cstdlib>

void func(int x)
{
  if (x)
    abort();
};
g++ -Werror=suggest-attribute=pure抱怨:



这对我来说似乎很奇怪-显然不知道该函数不能正常返回吗?有什么方法可以告诉GCC它并不总是正常返回,或者我不希望此警告针对此特定功能出现吗?

演示:https://godbolt.org/g/720VOT

最佳答案

这似乎是gcc中的错误(或者至少是文档和实际实现之间的差异)。 documentation on -Wsuggest-attribute=pure 读取:



但是,实际分析似乎忽略了未返回 call 的可能性,尽管它尊重可能的异常(exception)情况:

$ cat test-noreturn.cpp
[[noreturn]] void foo();

void func(int x)
{
    if (x)
        foo();
}

$ g++ -std=c++11 -c -O -Wsuggest-attribute=pure test-noreturn.cpp
$ cat test-noreturn-nothrow.cpp
[[noreturn]] void foo() throw();
//                      ^^^^^^^

void func(int x)
{
    if (x)
        foo();
}
$ g++ -std=c++11 -c -O -Wsuggest-attribute=pure test-noreturn-nothrow.cpp
test-noreturn-nothrow.cpp: In function ‘void func(int)’:
test-noreturn-nothrow.cpp:4:6: warning: function might be candidate for attribute ‘pure’ if it is known to return normally [-Wsuggest-attribute=pure]
 void func(int x)
      ^

08-27 14:01