简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解GNU C的__attribute__ 所有属性,便于调试开发。
2.应用实例
<1>.在GNU C编译器中,__attribute__是一个非标准的扩展,用于指定函数、变量或类型的属性。这些属性可以用于优化代码、控制警告、指定对齐方式等。下面是GNU C的__attribute__的所有属性:
1. __attribute__((aligned(n))):指定变量或类型的对齐方式为n字节。n必须是2的幂,并且不能超过机器的最大对齐值。
2. __attribute__((always_inline)):指定函数总是内联展开,即使编译器认为不合适也会强制内联展开。
3. __attribute__((cold)):指定函数是冷函数,即很少被执行的函数。这个属性可以用于优化代码,例如将冷函数放在不常访问的内存区域。
4. __attribute__((deprecated)):指定函数或类型已经过时。这个属性可以用于告诉用户不再推荐使用某个函数或类型,并生成相应的警告。
5. __attribute__((format(printf, m, n))):指定函数的参数和返回值按照printf风格进行格式化。这个属性可以用于检查函数调用时的参数类型和格式是否匹配。
6. __attribute__((hot)):指定函数是热函数,即经常被执行的函数。这个属性可以用于优化代码,例如将热函数放在高速缓存中。
7. __attribute__((malloc)):指定函数返回的指针是动态分配的内存。这个属性可以用于告诉编译器对函数返回的指针进行内存管理的优化。
8. __attribute__((noreturn)):指定函数不会返回。这个属性可以用于告诉编译器在函数调用后不需要生成返回代码,从而优化代码。
9. __attribute__((packed)):指定结构体或联合体的紧凑对齐方式,取消默认的对齐方式。这样可以减小结构体或联合体的大小,但可能会影响访问效率。
10. __attribute__((pure)):指定函数没有副作用,即函数的返回值只依赖于输入参数,不依赖于全局变量或静态变量。
11. __attribute__((section("name"))):指定变量或函数存储在指定的段(section)中。这个属性可以用于将特定的变量或函数放在特定的内存区域。
12. __attribute__((unused)):指定变量或函数未使用。这个属性可以用于抑制编译器产生的未使用变量或函数的警告。
13. __attribute__((used)):指定变量或函数被使用。这个属性可以用于告诉编译器即使变量或函数没有被显式引用,也不要将其优化掉。
GNU C的__attribute__的所有属性,可以根据需要在代码中使用。请注意,__attribute__是GNU C的扩展,可能不被其他编译器支持。在使用这些属性时,请确保你的代码是在GNU C编译器下进行编译的。