0
我想用myfree2()將free()中的所有包裝函數的實例替換爲myfree()。不幸的是,我無法讓它工作,因爲第二個宏重新定義了第一個。爲什麼第二個宏如果沒有參數就重新定義第一個宏呢?C宏重新定義
// I must delete this function or the macro will replace it as well and cause a syntax error!
void myfree(void *p)
{
if(p != NULL)
free(p);
}
void myfree2(void *p)
{
if(p != NULL)
free(p);
}
#define myfree(p) do { myfree2(p); p = (void *)0xdeadbeef; } while (0);
#define myfree myfree2
myfree(p); // Wrapper around free().
afunc(arg, myfree); // Wrapper is used as a function argument!
'的#define myfree(P)做{myfree2(P); p =(void *)0xdeadbeef; } while(0)'** remove **分號,或者* funky do-while *沒有意義。 PLUS:'if(p!= NULL)free(p);'允許使用NULL參數自由調用。 – wildplasser 2014-09-13 18:02:23
請避免使用宏。他們是生活中基本的東西。還有什麼你躲在地獄 – 2014-09-13 18:06:06
@EdHeal我同意,但我認爲它在這種情況下更值得。 – 2014-09-14 07:43:14