我的问题直接与__attribute__((noreturn))
有关,但更一般地也可能与其他人有关 - 例如__attribute__(noinline)
。我已经查看了gcc手册和Keil编译器参考指南,以确定将__attribute__
与函数一起使用的正确语法。我通常看到的是:
void function (void) __attribute__((noreturn)); //Prototype has __attribute__
void function (void) //Definition does not.
{
while (1);
}
我还看到了函数定义之前使用的__attribute__
如下:
__attribute__((noreturn)) void function (void)
{
while (1);
}
但是,我还没有看到它与函数原型和函数定义一起使用的示例。我认为在两个位置都有__attribute__
会带来更好的代码可读性;通过查看函数原型或已应用属性的定义,我会知道。结果如下:
__attribute__((noreturn)) void function (void) ; //Prototype has __attribute__
__attribute__((noreturn)) void function (void) //Definition has __attribute__
{ //as well.
while (1);
}
我使用上述方法使用Keil armcc编译器成功编译了代码。我有什么理由不将此方法与armcc或gcc一起使用?
答案 0 :(得分:3)
以下是可用的GCC 4.0文档的片段here。
The keyword __attribute__ allows you to specify special attributes when making a
declaration.
注意它说'声明'不是'定义'。 This较旧的Unix Wiz文章也有很多好建议。它还说要在声明中使用属性。
答案 1 :(得分:1)
正如Sean Perry所说,似乎 GCC 仅指定特殊属性可以与声明一起使用。
我正在深入挖掘 ARMCC 文档,最后找到了我要找的内容here:
您可以在声明,定义或两者中设置这些函数属性。
因此,对于ARMCC 我的,如OP中所示使用__attribute__
是安全的,但对于GCC则不然。