美文网首页
__attribute__ 机制详解

__attribute__ 机制详解

作者: 谦悠 | 来源:发表于2019-10-17 21:13 被阅读0次

    请移步原文链接

    [toc]


    __attribute 语法的来源

    GNU C 的一大特色就是__attribute__ 机制。attribute 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

    其位置约束为: 放于声明的尾部“;” 之前

    attribute 书写特征为: attribute 前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。

    attribute 语法格式为: attribute ((attribute-list))

    当__attribute__ 用于修饰对象时,它就如同C 语言语法体系结构的类型限定符,跟const , volatile , restrict 等属一类。
    当__attribute__ 用于修饰函数时,它就相当于一个函数说明符,跟inline,Noreturn 属同一类。
    当__attribute__ 用于修饰一个结构体,联合体或者枚举类型,该限定符只能放在类型标识符之前。

    __attribute__ 所支持的类型

    当我们需要识别当前编译器能否支持GNU 语法拓展,我们可以使用 __GNU __ 宏作为区分

    函数属性(Function Attribute) 类型属性(Type Attributes) 变量属性(Variable Attribute) Clang特有的
    noreturn aligned alias availability
    noinline packed at(address) overloadable
    always_inline bitband aligned
    flatten deprecated
    pure noinline
    const packed
    constructor weak
    destructor weakref(“target”)
    sentinel section(“name”)
    format unused
    format_arg used
    section visibility(“visibility_type”)
    used zero_init
    unused
    deprecated
    weak
    malloc
    alias
    warn_unused_result
    nonnull
    nothrow (不抛出C++ 异常)

    常用函数属性

    attribute((const)) function attribute

    用const属性修饰的函数与用pure属性修饰的十分类似,不过const属性比pure更严格,它要求函数不能读全局对象。此外,用const属性修饰的函数的参数不能是一个指针类型,而且在用const属性修饰的函数内往往不能调用一个非const属性的函数。

    __attribute__ ((__packed__))

    __attribute__ ((__packed__))的作用就是告诉编译器,被修饰的类型不要在编译的过程中进行字节对齐优化,要按照实际的情况进行对齐。


    相关文章

      网友评论

          本文标题:__attribute__ 机制详解

          本文链接:https://www.haomeiwen.com/subject/kbtbmctx.html