__attribute__说明符可以与函数原型和函数定义一起使用吗?

时间:2014-05-28 16:23:36

标签: c++ c gcc armcc

我的问题直接与__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一起使用?

2 个答案:

答案 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则不然。

相关问题