static inline

本文讨论了在代码中使用ifdef的弊端,并提出了改进方法:通过在头文件中定义条件性的静态内联函数来替换ifdef块。此外,文章还强调了在大多数情况下静态内联函数相较于宏的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英文版: http://www.kernel.org/doc/Documentation/SubmittingPatches

#ifdef 是丑陋的
混杂了 ifdef 的代码难以阅读和维护。别这样做。作为替代,将你的 ifdef 放
在头文件里,有条件地定义 "static inline" 函数,或者宏,在代码里用这些东
西。让编译器把那些"空操作"优化掉。

一个简单的例子,不好的代码:

    dev = alloc_etherdev (sizeof(struct funky_private));
    if (!dev)
        return -ENODEV;
    #ifdef CONFIG_NET_FUNKINESS
    init_funky_net(dev);
    #endif

清理后的例子:

(头文件里)
    #ifndef CONFIG_NET_FUNKINESS
    static inline void init_funky_net (struct net_device *d) {}
    #endif

(代码文件里)
    dev = alloc_etherdev (sizeof(struct funky_private));
    if (!dev)
        return -ENODEV;
    init_funky_net(dev);

3) 'static inline' 比宏好

Static inline 函数相比宏来说,是好得多的选择。Static inline 函数提供了
类型安全,没有长度限制,没有格式限制,在 gcc 下开销和宏一样小。

宏只在 static inline 函数不是最优的时候[在 fast paths 里有很少的独立的
案例],或者不可能用 static inline 函数的时候[例如字符串分配]。
应该用 'static inline' 而不是 'static __inline__', 'extern inline' 和
'extern __inline__' 。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值