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

emb*_*guy 5 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);
}
Run Code Online (Sandbox Code Playgroud)

我还看到了__attribute__在函数定义之前使用过的代码,如下所示:

__attribute__((noreturn)) void function (void)
{
    while (1);
}
Run Code Online (Sandbox Code Playgroud)

但是,我还没有看到将其与函数原型和函数定义一起使用的示例。我认为__attribute__在两个位置同时使用会提高代码的可读性;通过查看函数原型或定义,可以知道已经应用了属性。结果如下:

__attribute__((noreturn)) void function (void) ;  //Prototype has __attribute__

__attribute__((noreturn)) void function (void)    //Definition has __attribute__
{                                               //as well.
    while (1);
}
Run Code Online (Sandbox Code Playgroud)

我已经使用上述方法通过Keil armcc编译器成功编译了代码。是否有任何理由为什么我应该带任何或器armcc GCC使用这种方法吗?

Sea*_*rry 6

这是 GCC 4.0 文档中的一个片段,可在此处获得

The keyword __attribute__ allows you to specify special attributes when making a
declaration.
Run Code Online (Sandbox Code Playgroud)

请注意,它说的是“声明”而不是“定义”。这篇较旧的 Unix Wiz 文章也有很多很好的建议。它还说在声明中使用属性。