2012-08-16 4 views
0

Есть ли способ отключить все мои заявления printf условно, однако, без использования каких-либо макросов? Я хочу выполнить заглушение, не касаясь уже существующего кода, но добавляя строку к моему модулю, которая просто отключила бы все printf, уже существующие в исходном коде.Mute printf без макросов

Спасибо!

+5

Вы хотите только отключить 'printf' или каждый выход на 'stdout'? – rwos

+0

Вам нужно вернуться к нормальному поведению, так что только некоторое время отключите звук, а затем снова выполните обычный вывод printf? –

+0

@rwos: Просто напечатайте f предпочтительнее. – Scranton

ответ

3

Если вы хотите, чтобы свести на нет весь вывод stdout через printf, puts, putchar и т.д., вы можете использовать freopen(3) перенаправить его на битоприемник , например:

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

Заменить библиотеку Printf с вашей собственной реализации, добавив в исходный код:

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

В Linux, BSD или других Unix вы можете создать общую библиотеку, которая предоставляет свои собственные printf и оборачивает библиотеку C printf.

Тогда вы загрузите его впереди библиотеки C помощью LD_PRELOAD=mylib.so ./myprogram

Смежные вопросы