c - 静态内联 vs -finline-functions
问题描述
语境:
我正在用 C 编写一个模块,它定义了一些非常短的函数。我的直觉是static inline
在 .h 文件中声明它们,但是......
问题:
我了解 -O2 及更高版本的 GCC 可以选择内联函数,无论它们是否定义为静态和/或内联。鉴于此,在什么情况下您会static inline
在 .h 文件中显式声明一个函数?
[FWIW,我倾向于相信编译器......]
为了使其具体化(省略#includes 和guards 等):
版本 A:内联声明
// File: bvec.h
static inline void bvec_set(size_t bit_index, uint8_t *store) {
store[bit_index >> 3] |= (1 << bit_index & 0x7);
}
static inline void bvec_clear(size_t bit_index, uint8_t *store) {
store[bit_index >> 3] &= ~(1 << bit_index & 0x7);
}
// File: bvec.c
// (empty)
版本 B:相信编译器的-finline-functions
// File: bvec.h
void bvec_set(size_t bit_index, uint8_t *store);
void bvec_clear(size_t bit_index, uint8_t *store);
// File: bvec.c
void bvec_set(size_t bit_index, uint8_t *store) {
store[bit_index >> 3] |= (1 << bit_index & 0x7);
}
void bvec_clear(size_t bit_index, uint8_t *store) {
store[bit_index >> 3] &= ~(1 << bit_index & 0x7);
}
解决方案
推荐阅读
- excel - VBA中的IFERROR和IF公式
- python - 将循环中的数据附加到字典或系列中以获取新数据框
- cmake - 通过 TARGET_INCLUDE_DIRECTORIES 在 Visual Studio 项目中包含标头?
- sql-server - 时间 + 日期到 DateTime 的确定性加法
- vb.net - 有没有办法将转换为字节的 PDF 显示到浏览器中?(不是 Windows 应用程序)ASP.NET/VB.NET
- javascript - 使用 DOJO 在 Javascript 中格式化字符串
- mysql - MySQL group_by 和 max 没有按预期工作
- r - 将行中的数据添加到R中的列
- apollo - Apollo:延迟重新获取查询
- python - Pandas:如何根据特定的行值将值应用于一组行?