Fork me on GitHub

宏定义__attribute__

__attribute__

作用,GCC和Clang等编译器对代码优化、检查函数或参数、对齐的工具等。

基本语法

一般来说,__attribute__ 的语法如下:__attribute__((attribute_list)) 其中,attribute_list 是一个或多个用逗号分隔的属性。

常见的属性

以下是一些常见的__attribute__属性及其用法:

  • deprecated:标记函数或变量为已废弃,编译器会在使用时发出警告。int old_function() __attribute__((deprecated));

  • unused:标记变量或函数未使用,编译器会在未使用时发出警告。int unused_variable __attribute__((unused));

  • packed:指定结构体或联合体的成员按照最小字节对齐。struct __attribute__((packed)) packed_struct { char c; int i; };可用于联合体的数据解包。

  • aligned:指定变量或类型的对齐方式。int aligned_variable __attribute__((aligned(16)));

  • section:指定变量或函数存放在特定的段(section)中。int variable __attribute__((section(".mysection")));

可用来嵌入式指定变量烧录位置,需要修改连接脚本文件.ld

  • constructordestructor:指定函数作为构造函数或析构函数在程序开始或结束时自动执行。void my_constructor() __attribute__((constructor)); void my_destructor() __attribute__((destructor));

  • weak:标记变量或函数为弱符号,允许多个同名符号存在于不同的目标文件中。int weak_variable __attribute__((weak));``void weak_function() __attribute__((weak));

注意事项

  • __attribute__ 是GCC和Clang的扩展,不属于C++标准,因此不同编译器可能有不同的扩展支持和语法。
  • 使用__attribute__时,应当仔细检查编译器文档,确保了解属性的行为和支持情况。
  • 在一些情况下,可以使用#pragma指令来达到类似的效果,但是__attribute__通常提供了更细粒度的控制和更好的可移植性。

总体来说,__attribute__是一种强大的工具,可以帮助优化代码、提供编译时的额外信息以及实现特定的编译器行为。

posted @ 2024-07-25 13:29  赤诚Xie  阅读(0)  评论(0编辑  收藏  举报