gpt4 book ai didi

c - Eclipse - 在 printf() 调用后将 fflush(stdout) 作为默认值

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:45 25 4
gpt4 key购买 nike

拥有same case .

是否有任何解决方案使得 fflush(stdout)将在 printf() 之后自动发生而不是添加 fflush(stdout)在每个 printf() 之后打电话?

我使用 Eclipse IDE for C/C++ Developersgcc --version gcc (GCC) 4.8.1windows 7

最佳答案

如果你想全局禁用缓冲,你可以使用setvbuf:

setvbuf(stdout, NULL, _IONBF, 0);

在程序的开头。

如果您只想对某些调用执行此操作,您可以定义自己的宏来执行此操作,例如:

#define printflush(s, ...) do { printf(s, __VA_ARGS__); fflush(stdout); } while (0)

它使用一个技巧将两个函数调用放在一个新的范围内。

在这两种情况下,您都需要至少有两个参数(如 printflush("id = %d\n", id)),否则会在编译时导致语法错误.

针对上述问题的 GCC 特定解决方案:您可以扩展上面的宏,以便它也可以使用单个参数:

#define printflush(s, ...) do { printf(s, ##__VA_ARGS__); fflush(stdout); } while (0)

这样,您也可以将它与 printflush("Hey!") 一起使用。

编辑:正如@unwind 所指出的,可变参数宏已在 C99 中标准化。不过,GCC 4.8 无需任何额外切换即可理解它们。

关于c - Eclipse - 在 printf() 调用后将 fflush(stdout) 作为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21306369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com