我的问题与__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?