给出以下代码:
#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)
^