我一直在玩 [[noreturn]] 属性,我试图掌握并使用它(我理解[[noreturn]]
是C++11 标准属性并且__attribute__((noreturn))
是 GCC/Clang 扩展)。作为其中的一部分,我启用了 Clang 警告 -Wmissing-noreturn。
> clang++ -v
Ubuntu clang version 3.7.1-svn253742-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
Target: x86_64-pc-linux-gnu
Thread model: posix
foo.cpp:
enum bar
{
A = 1,
B,
C
};
void foo()
{
switch (bar())
{
case A:
case B:
case C:
default:
break;
}
}
int main()
{
foo();
return 0;
}
然后编译:
> clang++ foo.cpp -o foo -Wmissing-noreturn -std=c++14
foo.cpp:9:1: warning: function 'foo' could be declared with attribute 'noreturn'
[-Wmissing-noreturn]
{
^
1 warning generated.
在我看来,它会回来!这里发生了什么?这是编译器错误吗?
如果您从 A 中删除“= 1”,则它可以正常编译而不会发出警告。
如果我确实创建了 foo() 函数[[noreturn]] void foo()
,那么它确实会因分段错误而崩溃。