• 【ARM 嵌入式 编译系列 11.3 -- GCC attribute packed noreturn constructor 介绍】



    请阅读【ARM GCC 编译专栏导读】

    文章目录

    GCC__attribute__ 是一个编译器扩展特性,允许开发者在源代码中设置函数属性(function attributes)、变量属性(variable attributes)和类型属性(type attributes)。这些属性可以影响函数、变量或类型的行为。

    以下是一些常见的 __attribute__ 属性:

    __attribute__((constructor))__attribute__((destructor)):这两个属性可以用于函数,让函数在 main 函数执行前(对于 constructor)或执行后(对于 destructor)被自动执行。

    例如:

    __attribute__((constructor)) void before_main() 
    { 
    	printf("Before main\n"); 
    } 
    
    __attribute__((destructor)) void after_main() 
    { 
    	printf("After main\n"); 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    __attribute__((packed)):这个属性可以用于结构体和联合体,用来阻止编译器对其成员进行优化对齐,从而减小其大小。

    例如:

    struct __attribute__((packed)) Test 
    { 
    	char a; 
    	int b; 
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

    __attribute__((aligned(x))):这个属性可以用于变量或类型,用来指定其对齐方式。x 必须是 2 的幂,且在某些情况下必须小于或等于硬件和操作系统能够支持的最大对齐。

    例如:

    int x __attribute__((aligned(16))) = 0; // x 在内存中的地址将是 16 的倍数
    
    • 1

    __attribute__((noreturn)):这个属性可以用于函数,表示该函数不返回。这可以帮助编译器优化调用此类函数的代码。

    例如:

    void __attribute__((noreturn)) abort_program() 
    { 
    	printf("Aborting program\n"); 
    	exit(1); 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:这些属性是 GCC 的特性,可能无法在其他编译器上使用。

  • 相关阅读:
    Java字母异位词分组leetcode_49
    【无标题】
    手记系列之六 ----- 分享个人使用kafka经验
    JZ40 最小的K个数
    中间件 Redis 服务集群的部署方案
    JMeter之脚本录制
    【1107】
    PyScript:让Python在HTML中运行
    golang获取postgres或clickhouse连接
    Shell三剑客之awk
  • 原文地址:https://blog.csdn.net/sinat_32960911/article/details/132290159