38、GCC 对 C 语言的扩展

GCC 对 C 语言的扩展

1. 内联函数

内联函数是一种特殊的函数,编译器会将内联函数的整个代码复制到调用该函数的位置,而不是将函数存储在外部,调用时再跳转过去执行。这样做可以节省函数调用的开销,并且由于编译器可以一起优化调用者和被调用者,因此在调用点可能会进行潜在的优化。不过,如果将函数复制到每个调用它的代码块中,可能会对代码大小产生不利影响。所以,只有当函数小而简单,或者在不同地方调用次数不多时,才应该使用内联函数。

1.1 内联关键字

多年来,GCC 支持 inline 关键字,用于指示编译器将给定的函数内联。C99 对这个关键字进行了规范化:

static inline int foo (void) { /* ... */ }

不过,从技术上讲,这个关键字只是一个提示,建议编译器考虑将给定的函数内联。GCC 还提供了一个扩展,用于指示编译器始终内联指定的函数:

static inline __attribute__ ((always_inline)) int foo (void) { /* ... */ }

1.2 替代预处理器宏

内联函数的一个明显候选是预处理器宏。GCC 中的内联函数性能与宏相当,而且还能进行类型检查。例如,将下面的宏:

#define max(a,b) ({ a > b ? a : b; })
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值