我有我要轉換爲宏而不違反類型安全轉換一個行函數宏在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
宏通常更糟。你爲什麼喜歡他們? –