【问题标题】:how to specify attribute of GNU C?如何指定 GNU C 的属性?
【发布时间】:2013-04-14 03:24:36
【问题描述】:

GUN C manual6.30 声明函数的属性,它指出:

您还可以在每个关键字前后使用__ 指定属性。这允许您在头文件中使用它们,而不必担心可能的同名宏。例如,您可以使用__noreturn__ 而不是noreturn

这是否意味着用户可以指定自定义属性?或者还有什么?我肯定很困惑,谁能帮忙,或者给我一些样品?

【问题讨论】:

    标签: attributes gnu function-attributes


    【解决方案1】:

    它的意思是头文件可能已经完成了:

    #define noreturn 3
    

    如果您尝试将函数声明为:

    void fatal () __attribute__ ((noreturn));
    

    它会像你写的一样被处理:

    void fatal () __attribute__ ((3));
    

    这不是你想要的。所以你可以改写:

    void fatal () __attribute__ ((__noreturn__));
    

    这是安全的,因为不允许用户定义名称以两个下划线开头的宏,这些名称是为实现保留的。见What are the rules about using an underscore in a C++ identifier?

    【讨论】:

    • 嗨,@Barmar,谢谢:),在您的回复中,用户不允许定义名称以两个下划线开头的宏,我在 gcc v4.7.2 上测试,与#define __foo__ 2,这对gcc -Wall test.c 很好。这个限制只是编码转换还是 GNU 限制?还是别的什么?
    • 它们是由语言指定的编程限制。请参阅我刚刚添加链接的问题。
    • 非常感谢@Barmar
    猜你喜欢
    • 2013-09-29
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多