当我使用clang(version 3.4 (trunk 194574)
)进行编译时:
typedef void (* FunctionThatNeverReturns [[ noreturn ]])();
我得到这个:
error: 'noreturn' attribute only applies to functions and methods
这让我感到惊讶,因为它与较旧版本的clang完美配合。
那么,如何定义指向
[[ noreturn ]]
函数的指针?我需要这样做是因为我在
[[ noreturn ]]
函数内部调用了函数指针,如果该函数指针未标记为noreturn,则该函数显然会产生警告。哦,这可行:
typedef void (* FunctionThatNeverReturns [[ gnu::noreturn ]])();
但是,没有独立于编译器的解决方案吗?
最佳答案
试试这个
typedef void (* FunctionThatNeverReturns)() [[ noreturn ]];
在原始文件中,放置说明符的位置使其适用于指针,而不适用于指向的对象。但是一个noreturn指针根本没有任何意义,您正在尝试为一个noreturn函数键入一个typedef指针。
演示:http://ideone.com/9mBR9x