c - 对小操作使用宏,这是好习惯吗?

标签 c macros

我有一小段代码需要读取以 32 位整数位打包的 4 位值。由于我需要多次调用此操作,即使它很简单,我也需要最大速度。 我在思考宏和内联函数,因此我制作了这个宏:

#define UI32TO4(x, p) (x >> ((p - 1) *4) & 15)

我有一个内联函数可以做同样的事情。

static inline Uint8 foo_getval(Uint32 bits, int pos){
    return (bits >> ((pos-1)*4)) & 15;
}

考虑到操作的简单性,并且值已经为这个调用准备好了(所以不可能调用错误的类型,或者传递太大的值等等),什么是最好的利用?或者,至少,对于以后可能阅读/修改代码的其他人来说是最容易理解的?

编辑!忘了说了,我用的是 C99。

最佳答案

功能更安全。您认为值始终“正确”的假设仅在您开发该代码时成立。您无法判断线下的某个人(或您疲倦时的自己)是否会传递意想不到的值。

编译器会在认为有效时进行内联。尽可能使用类型安全的函数,只有在别无选择时才使用宏。

关于c - 对小操作使用宏,这是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776383/

相关文章:

c++ - 有没有办法为函数创建预处理器宏?

带有 syslog 日志记录的 C 宏

c - C 预处理器中的 SIGN 宏

c - 事件驱动的linux进程监视器: how to do that?

c++ - 给定两个二进制数,将一个子集从一个复制到另一个

c - C中的时间测量

c - 使用 linux 宏 access_ok() 有什么意义

c - 这个 for 循环中发生了什么

我们可以在 union 中使用指针吗?

c - 奇怪的#define 声明,无法理解它扩展的内容