0

有没有一种方法可以在不使用任何宏的情况下有条件地使所有 printf 语句静音?我想在不触及现有代码的情况下完成静音,但在我的模块中添加一行,这将简单地禁用源代码中已经存在的所有 printf。

谢谢!

4

3 回答 3

3

如果您想取消所有输出到stdoutvia printf, puts,putchar等,您可以使用freopen(3)将其重定向到一个位桶,例如:

// On Unix and Unix-like systems:
freopen("/dev/null", "w", stdout);
// On Windows:
freopen("NUL", "w", stdout);
于 2012-08-16T15:23:22.483 回答
2

在 Linux、BSD 或其他 Unix 上,您可以创建一个共享库,它提供自己的printf并包装 C 库printf

然后你可以在 C 库之前使用LD_PRELOAD=mylib.so ./myprogram

于 2012-08-16T15:22:49.627 回答
0

通过将其添加到源代码中,将库 printf 替换为您自己的实现:

int printf(const char * restrict format,...) { return 0; }
于 2012-08-16T15:21:32.020 回答