我碰到這個預處理定義出來,而閱讀Windows Research Kernel (WRK) 1.2的源代碼:「#define assert(exp)((void)0)」是做什麼的?
#define assert(exp) ((void) 0)
這是什麼代碼呢?爲什麼定義?
我碰到這個預處理定義出來,而閱讀Windows Research Kernel (WRK) 1.2的源代碼:「#define assert(exp)((void)0)」是做什麼的?
#define assert(exp) ((void) 0)
這是什麼代碼呢?爲什麼定義?
它定義表達式assert(任何東西)什麼都不做。
假設所用的環境不支持ANSI C assert語句,或者程序員不知道可以通過定義NDEBUG來禁用它。
要什麼bdonlan說擴展,宏不會擴展爲空的原因是因爲如果它這樣做,則是這樣的:
assert(something) // oops, missed the semi-colon
assert(another_thing);
將編制發佈模式而不是在調試模式。這是因爲它是((void) 0)
而不是僅僅0
是爲了防止「無效的聲明」警告(或任何MSVC調用它們)。
只是好奇 - 什麼是WRK 1.2? – 2009-05-20 03:36:18
我的猜測:Windows Research Kernel 1.2 – 2009-05-20 03:52:20