使用宏来进行小型操作,这是一种很好的做法吗?

Del*_*m_4 3 c macros

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

#define UI32TO4(x, p) (x >> ((p - 1) *4) & 15)
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑!忘了提,我正在使用C99.

Mat*_*Mat 8

功能更安全.您开发该代码时,您的假设值始终是"正确的".你不知道是否有人下线(或你累了的时候)不会传递意外的值.

当编译器认为它有效时,它将执行内联.尽可能使用类型安全函数,只有在没有其他实际选择时才使用宏.