1
我有許多現有的printf語句,我想通過禁用:放棄現有的printf語句,使新加入的printf語句
#define printf(...) {};
但我要定義將仍然使用標準輸入輸出的printf新myprintf聲明。 我該怎麼做?
我有許多現有的printf語句,我想通過禁用:放棄現有的printf語句,使新加入的printf語句
#define printf(...) {};
但我要定義將仍然使用標準輸入輸出的printf新myprintf聲明。 我該怎麼做?
用途:
#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
神奇。 ..謝謝!這是爲了調試,但我首先對#defining printf的危險感興趣 – joemooney 2013-03-13 17:25:11
'myprintf'和'('之間'#define'行中的空格是非常重要的,如果你改寫#define myprintf(printf)',那麼'myprintf'將會是一個接受一個參數並擴展爲空的宏。 – 2013-03-13 17:29:20
在這種情況下,我認爲你不需要'do ... while(0)'#define printf (...)'應該工作,只要沒有'printf'調用被用作操作數。另一個選項是'#define printf(...)0' – 2013-03-13 17:31:49