我有我要转换为宏而不违反类型安全转换一个行函数宏在C
#define UINTPTR_MAX_XOR_WITH_1 (uintptr_t) (UINTPTR_MAX^1)
struct node
{
unsigned long key;
tbb::atomic<struct node*> lChild; //format <address,flagBit>
tbb::atomic<struct node*> rChild; //format <address,flagBit>
};
struct node* getAddress(struct node* p)
{
return (struct node*)((uintptr_t) p & UINTPTR_MAX_XOR_WITH_1);
}
main()
{
nodeAddr = getAddress(node);
lNodeAddr = getAddress(node->lChild);
}
我尝试用这个宏替换getAddress()
功能的功能。我知道这个宏定义是错误的。
#define getAddress(p) ((struct node*) (uintptr_t) p & UINTPTR_MAX_XOR_WITH_1)
我看到这篇文章 Macro vs Function in C 但还是没能弄清楚如何做到这一点对于这种情况
该函数肯定比宏好。而你的主要是相当时髦。 –
为什么认为这个函数比一个宏好。主要更复杂。我只是把相关的代码放在这里:) – arunmoezhi
宏通常更糟。你为什么喜欢他们? –