c - 如何防止功能打印?

标签 c gcc printf

是否可以静音一个函数? 例如:

#include <stdio.h>
int function(){
  printf("BLAH!");
  return 10;

}
int main(){
  printf("%d", silence( function()) );
return 0;
}

而不是:

BLAH!
10

我会得到:

10

这可能吗?如果阳性怎么办?

最佳答案

几乎可以做您想做的事情的一种非常复杂的方法是使用 dup2()系统调用。这需要执行 fflush(stdout); dup2(silentfd, stdout); 在调用 function() 之前,然后复制回去:fflush(stdout); dup2(savedstdoutfd, stdout);。所以不可能像 silence(function()) 那样做,因为这个结构只允许在 function() 已经执行之后执行代码。

必须提前准备文件描述符silentfdsavedstdoutfd(未经测试的代码):

 int silentfd = open("/dev/null",O_WRONLY);
 int savedstdoutfd = dup(stdout);

这几乎肯定不是您真正想要的,但鉴于您的问题措辞是“这可能吗?”,答案是“几乎”。

关于c - 如何防止功能打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498364/

相关文章:

gcc - 自定义 gcc 预处理器

c - C语言中printf语句赋给变量时,它存储什么

C 编译器差异? Char 中的 NUL 控制字符

C - 看门狗定时器未启动或调用回调函数

编译带有依赖项、h 和 h0 文件的 c 程序

c - 为什么有时只有 `error: jump into statement expression`?

`printf` 语句里面的条件

c - 替代 sprintf() 将整数格式化为 ascii 字符

c - 结构的不完整类型错误

c++ - 为什么 March=native 在 Apple M1 上不起作用?