C 语言的 GCC 扩展
2016-04-16 15:18
387 查看
GNU 编译器(GCC)提供了很多 C 语言扩展,编译器会使用该信息生成更高效的机器代码。
内联函数
避免内联
纯函数
返回值只受函数参数或 nonvolatile 全局变量影响。
常函数
常函数是一种严格的纯函数。常函数不能访问全局变量,参数不能是指针类型。因此,常函数的返回值只和值传递的参数值有关。
没有返回值的函数
分配内存的函数
强制调用方检查返回值
把函数标识为“Deprecated(已废弃)”
把函数标识为已使用
把函数或参数标识为未使用的
对结构体进行紧凑存储(pack)
packed 属性告诉编译器一个类型或变量应该在内存中紧凑存储,使用尽可能少的空间,可能不依赖对齐需求。如果在结构体(struct)或联合体(union)上指定该属性,就需要对所有变量进行紧凑存储。如果只是对某个变量指定该属性,就只会紧凑存储该特定变量。
内联函数
static inline __attribute__ ((always_inline)) int foo(void) { /* ... */ }
避免内联
__attribute__ ((noinline)) int foo(void) { /*...*/ }
纯函数
__attribute__ ((pure)) int foo(int val) { /* */ }
返回值只受函数参数或 nonvolatile 全局变量影响。
常函数
__attribute__ ((const)) int foo(int val) { /*...*/ }
常函数是一种严格的纯函数。常函数不能访问全局变量,参数不能是指针类型。因此,常函数的返回值只和值传递的参数值有关。
没有返回值的函数
__attribute__ ((noreturn)) void foo(int val) { /*...*/ }
分配内存的函数
__attribute__ ((malloc)) void *copy() { int size = 10; return malloc(10); }
强制调用方检查返回值
#include <stdio.h> __attribute__ ((warn_unused_result)) int foo() { return 0; } int main() { foo(); return 0; }
把函数标识为“Deprecated(已废弃)”
__attribute__ ((deprecated)) void foo(void) { /*...*/ }
把函数标识为已使用
static __attribute__ ((used)) void foo(void) { /*...*/ }
把函数或参数标识为未使用的
int foo(int __attribute__ ((unused)) value) { /*...*/}
对结构体进行紧凑存储(pack)
struct __attribute__ ((packed)) foo { ... };
packed 属性告诉编译器一个类型或变量应该在内存中紧凑存储,使用尽可能少的空间,可能不依赖对齐需求。如果在结构体(struct)或联合体(union)上指定该属性,就需要对所有变量进行紧凑存储。如果只是对某个变量指定该属性,就只会紧凑存储该特定变量。
相关文章推荐
- iOS 国际化 检测格式是否正确
- LeetCode——025
- 每天一个linux命令(4):mkdir
- 二分法
- 子数组最大和问题
- Android震动---启动、循环、取消控制
- 已知二叉树的前序和中序序列,构建二叉树并求后序序列,java实现。
- linux设备驱动模型
- 百度业务运营部_数据分析师(产品运营)岗位要求详解(1)
- LinuxMint下安装Android Studio
- Android_Button
- 笔记一:虚拟机运行时的数据区域
- self & __set__ __get__ & static、class、abstract
- Deep Learning(深度学习)学习笔记整理
- drawcall优化
- Java 详解instanceof
- MySQL安装未响应解决方法
- 秒杀系统:并发队列 接口设计 并发请求数据安全处理
- mysql zip 安装
- led 的 platform驱动实现