# 可设置的所有内容

以下是 `__attribute__` 可以设置的属性的详细列表，涵盖了常见及较少见的所有选项，以表格形式呈现：

| **属性名称**             | **作用**                                                   | **示例**                                                                  |
| -------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------- |
| `aligned`            | 指定数据对齐方式                                                 | `int x __attribute__((aligned(16)));`                                   |
| `always_inline`      | 强制内联函数                                                   | `inline void func() __attribute__((always_inline));`                    |
| `cleanup`            | 在变量作用域结束时调用指定清理函数                                        | `int my_var __attribute__((cleanup(clean_func)));`                      |
| `cold`               | 表示函数不常调用，降低优化程度                                          | `void rarely_used() __attribute__((cold));`                             |
| `constructor`        | 指定函数在 `main` 之前执行，通常用于初始化                                | `void init() __attribute__((constructor));`                             |
| `deprecated`         | 标记函数或变量为“已废弃”，使用时产生警告                                    | `void old_func() __attribute__((deprecated));`                          |
| `destructor`         | 指定函数在 `main` 之后执行，通常用于清理                                 | `void cleanup() __attribute__((destructor));`                           |
| `error`              | 使用被标记的函数时会强制报错                                           | `void forbidden() __attribute__((error("Not allowed")));`               |
| `fallthrough`        | 防止编译器对 `switch` 语句的隐式穿透产生警告                              | `case 1: __attribute__((fallthrough));`                                 |
| `flatten`            | 优化函数调用路径中的内联                                             | `void func() __attribute__((flatten));`                                 |
| `format`             | 格式化检查，确保格式字符串和参数一致                                       | `void log(const char *fmt, ...) __attribute__((format(printf, 1, 2)));` |
| `format_arg`         | 指定参数作为格式化参数使用，类似 `printf`                                | `char *str_fmt(const char *fmt) __attribute__((format_arg(1)));`        |
| `gnu_inline`         | 使用 GNU 风格内联                                              | `inline void func() __attribute__((gnu_inline));`                       |
| `hot`                | 表示函数被频繁调用，编译器会更积极优化                                      | `void frequently_used() __attribute__((hot));`                          |
| `ifunc`              | 指定函数的间接实现                                                | `int func() __attribute__((ifunc("resolve_func")));`                    |
| `malloc`             | 函数类似 `malloc`，返回独立内存块                                    | `void* allocate(size_t size) __attribute__((malloc));`                  |
| `nonnull`            | 指定参数不能为空指针，若为空则警告                                        | `void func(int *ptr) __attribute__((nonnull));`                         |
| `noinline`           | 强制函数不内联                                                  | `void func() __attribute__((noinline));`                                |
| `noreturn`           | 指定函数无返回（如无限循环或异常终止）                                      | `void fatal() __attribute__((noreturn));`                               |
| `packed`             | 紧凑布局结构体，移除内存填充                                           | `struct __attribute__((packed)) MyStruct { int a; char b; };`           |
| `pure`               | 表示函数无副作用                                                 | `int square(int x) __attribute__((pure));`                              |
| `returns_nonnull`    | 指定函数返回值不为空指针，避免空指针检查                                     | `int* get_ptr() __attribute__((returns_nonnull));`                      |
| `section`            | 将变量或函数放入特定的内存段                                           | `int critical_data __attribute__((section(".mysection")));`             |
| `sentinel`           | 确保可变参数列表最后一个参数为空（例如 `NULL`）                              | `void func(int, ...) __attribute__((sentinel));`                        |
| `unused`             | 防止未使用的变量产生警告                                             | `int var __attribute__((unused));`                                      |
| `used`               | 告知编译器不要优化掉未被显式引用的符号                                      | `void func() __attribute__((used));`                                    |
| `visibility`         | 控制符号的可见性（如 `default`, `hidden`, `internal`, `protected`） | `int var __attribute__((visibility("hidden")));`                        |
| `warn_unused_result` | 如果函数返回值未使用则发出警告                                          | `int calculate() __attribute__((warn_unused_result));`                  |
| `weak`               | 将符号声明为弱符号，允许强符号覆盖                                        | `void my_func() __attribute__((weak));`                                 |
| `alias`              | 为符号提供别名                                                  | `void func() __attribute__((alias("other_func")));`                     |
| `nothrow`            | 声明函数不会抛出异常                                               | `void func() __attribute__((nothrow));`                                 |
| `assume_aligned`     | 提示编译器特定指针具有对齐要求，便于优化                                     | `void *aligned_ptr __attribute__((assume_aligned(16)));`                |
| `cleanup`            | 在变量超出作用域时调用指定的清理函数                                       | `int my_var __attribute__((cleanup(clean_func)));`                      |
| `transparent_union`  | 声明一个透明联合体，使联合体的成员可以直接访问                                  | `union __attribute__((transparent_union)) MyUnion { int i; float f; };` |
| `leaf`               | 表示函数为叶函数（不调用其他函数），可优化调用                                  | `void leaf_func() __attribute__((leaf));`                               |
| `vector_size`        | 指定向量的大小，便于 SIMD 优化                                       | `int vec __attribute__((vector_size(16)));`                             |

这些 `__attribute__` 提供了控制函数、变量、数据结构和编译器行为的灵活性。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hly-tech.gitbook.io/compile/compiler/bian-yi-gong-ju/clang-gcc/__attribute__/ke-she-zhi-de-suo-you-nei-rong.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
