是否可以使功能静音?例如:
#include <stdio.h>
int function(){
printf("BLAH!");
return 10;
}
int main(){
printf("%d", silence( function()) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而不是:
BLAH!
10
Run Code Online (Sandbox Code Playgroud)
我会得到:
10
Run Code Online (Sandbox Code Playgroud)
可能吗?如果积极怎么办呢?
Pas*_*uoq 10
一个非常复杂的方法来做你想要的几乎是使用dup2()系统调用.这需要fflush(stdout); dup2(silentfd, stdout);在function()调用之前执行,然后再复制:fflush(stdout); dup2(savedstdoutfd, stdout);.所以不可能这样做silence(function()),因为这个构造只允许在function()已经执行之后执行代码.
文件描述符silentfd和savedstdoutfd具有预先(未测试的代码),以制备:
int silentfd = open("/dev/null",O_WRONLY);
int savedstdoutfd = dup(stdout);
Run Code Online (Sandbox Code Playgroud)
这几乎肯定不是你真正想要的,但是因为你的问题被称为"有可能吗?",答案是"几乎".
使用宏功能和空设备.
例如对于窗户
#include <stdio.h>
#define silence(x) (_stream = freopen("NUL:", "w", stdout), _ret_value = x,_stream = freopen("CON:", "w", stdout),_ret_value)
int _ret_value;
FILE *_stream;
int function(){
printf("BLAH!");
return 10;
}
int main(void){
printf("%d", silence( function()) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用此宏而不是printf能够阻止打印:
int flag=0;
#define PRINT(...) if(flag){printf(...)}
Run Code Online (Sandbox Code Playgroud)
然后通过考虑变量使用PRINT宏flag.如果flag==1,该功能将打印,如果flag==0,该功能将无法打印.
| 归档时间: |
|
| 查看次数: |
2614 次 |
| 最近记录: |