如果头文件不仅包括函数的原型,而且还包括完整的函数,那么在C中使用头文件的意义是什么?我在linux源代码中偶然发现了文件kdev_t.h,它包含以下内容:
static inline dev_t new_decode_dev(u32 dev)
{
unsigned major = (dev & 0xfff00) >> 8;
unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00);
return MKDEV(major, minor);
}为什么是.h扩展?This问题指的是C++中的类,但我不确定同样的原理是否适用于这里。
发布于 2014-09-01 08:47:01
我没有任何来源来支持我,但我认为这是以下原因的组合:
static inline函数本质上提供了与宏相同的性能优势。内核具有很强的可配置性,您可以看到许多用于选项的#ifdef。有时,如果内核函数被禁用,我们仍然希望这些函数是可调用的,但只是返回一个错误。这些空的实现最好放在头文件中,而不是放在目标文件中,这样内核就不必在源代码树中的每个C文件上运行编译器。换句话说,我们改进了编译时间。显然,还有一些运行时优化,编译器可以提前知道死代码所在的位置。我认为以上三个原因结合起来就是Linux在头文件中添加一些小函数的原因。
https://stackoverflow.com/questions/25582076
复制相似问题