2012-08-16 38 views
0

有沒有一種方法可以有條件地靜音所有我的printf語句,但是,不使用任何宏?我想在不觸及已有代碼的情況下完成靜音,但在模塊中添加一行可以禁用源代碼中已有的所有printf。靜音printf無宏

謝謝!

int printf(const char * restrict format,...) { return 0; } 
+5

你只是想靜音'printf's或每個輸出到'stdout'嗎? – rwos 2012-08-16 15:20:24

+0

您是否需要恢復正常行爲,所以只需靜音一段時間,然後再次執行正常的printf輸出? – 2012-08-16 15:30:27

+0

@rwos:最好只是printf。 – Scranton 2012-08-16 17:37:42

回答

3

如果您想通過printfputsputchar等,以抵消所有的輸出到stdout C庫的加載它,你可以使用freopen(3)將其重定向到一個位鬥,例如:

// On Unix and Unix-like systems: 
freopen("/dev/null", "w", stdout); 
// On Windows: 
freopen("NUL", "w", stdout); 
0

加給你的源代碼替換庫的printf用自己的實現printf

,那麼你會提前使用LD_PRELOAD=mylib.so ./myprogram

2

在Linux,BSD或其他Unix,你可以創建一個共享庫,它提供了自己的printf和包裝的C庫: