2013-03-13 76 views

回答

4

用途:

#define myprintf (printf) 

括號將禁用宏擴展。

#include <stdio.h> 

#define printf(...) do {} while(0) 
#define myprintf (printf) 

int main() { 
    printf("printf\n"); 
    myprintf("myprintf\n"); 
} 

(不,我會建議#defining printf遠在首位...)

對於爲什麼我用do {} while(0)代替{}的說明,請參閱Proper C preprocessor macro no-op

+0

神奇。 ..謝謝!這是爲了調試,但我首先對#defining printf的危險感興趣 – joemooney 2013-03-13 17:25:11

+0

'myprintf'和'('之間'#define'行中的空格是非常重要的,如果你改寫#define myprintf(printf)',那麼'myprintf'將會是一個接受一個參數並擴展爲空的宏。 – 2013-03-13 17:29:20

+0

在這種情況下,我認爲你不需要'do ... while(0)'#define printf (...)'應該工作,只要沒有'printf'調用被用作操作數。另一個選項是'#define printf(...)0' – 2013-03-13 17:31:49