aru*_*zhi 0 c macros inline-functions c-preprocessor
我有一个1行inline函数,它是我的代码中的热点的一部分.我想看看将此更改为宏是否有益.写作功能我不必担心副作用.但是如何在没有副作用的情况下为此编写宏?
#define FLAG1_BIT 4
struct node
{
unsigned long key;
struct node* child[K]; //format <address,flag1,flag2,flag3>
};
static inline bool isFlag1Set(struct node* p)
{
return ((uintptr_t) p & FLAG1_BIT) != 0;
}
Run Code Online (Sandbox Code Playgroud)
首先,请记住,我没有理由认为编译器不会内联它,所以这个练习几乎没有任何成就.
避免副作用的第一条规则是确保参数在定义中仅出现一次.接下来,在定义中,将参数和整个定义包装在括号中:
#define isFlag1Set(p) (((uintptr_t) (p) & FLAG1_BIT) != 0)
Run Code Online (Sandbox Code Playgroud)