【问题标题】:header full of inline functions, can i move the code outside header file and still inline everything?标头充满了内联函数,我可以将代码移到头文件之外并且仍然内联所有内容吗?
【发布时间】:2012-03-25 08:21:36
【问题描述】:

我已经结束了将许多小的内联函数放在一个头文件中,该头文件包含在许多编译单元中, 代码被编译器正确内联,程序运行起来就像一个魅力。

但是现在头文件是非常不寻常的东西(作为头文件), 为了使其更具可读性,我想这样做:

#ifndef MY_HEADER_H
#define MU_HEADER_H

static inline 
void my_fnct (my_param a);

#include "my_header.inline.c"

#endif

文件my_header.inline.c 会是这样的:

static inline 
void my_fnct (my_param a)
{
    // .. my code ..
}

然后,当我想要这些函数时,我只包含头文件。

我的问题是:有没有更好的方法来实现这一点,而无需用太多代码填充头文件? 或者我可以这样做并期望其他开发人员能够毫无问题地理解这段代码?

【问题讨论】:

  • 再次在标题中使用内联函数有什么问题?内联函数应该非常短,单行,真的。
  • 至于代码性能,唯一能看出这是否重要的​​是衡量标准。包含所有内容的编译器的减速是多少?我的经验是,现代编译器可以忽略这些事情。并且不值得为数百个配置选项而烦恼,您可以轻松混淆。

标签: c header inline code-readability


【解决方案1】:

不,你不能。但是,您可以使用 GCC 的链接时间优化功能(然后可能会内联一些调用,即使该函数未声明 inline 并且在每个编译单元的标头中都不可用),例如使用gcc -flto 编译和链接(这需要最新的 GCC 编译器,例如至少 4.6 并减慢构建时间)。

【讨论】:

    【解决方案2】:

    我个人不喜欢的一种做法是将内联函数提取到扩展名为 .inl 的单独文件中。这只是约定,您可以为文件命名任何您喜欢的名称。我有一个折叠代码的 IDE,所以我可以隐藏我不想看到的东西,而不是有一个单独的文件。

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多