【问题标题】:printf before assert doesn't work断言之前的 printf 不起作用
【发布时间】:2011-10-13 19:02:15
【问题描述】:

我想我以前见过这个问题,我敢打赌那里有更好的解决方案,所以问..

在调试过程中,我发现assert 之前的任何printf 都不能正常工作。它们大部分时间都没有打印出来。我尝试添加 fflush(stdout) 但似乎没有帮助。

还有其他想法或替代方案吗?

例子:

printf... <- not printed
printf... <- not printed due to the assert. stdout not flushed?

do something

assert()

【问题讨论】:

  • 可以给我们看看相关代码吗?
  • 不看你的代码就无法判断。
  • “更好的解决方案”?你的解决方案是什么?
  • 我刚刚尝试了一个小程序,它可以做到printf("Hello\n"); assert(0);。它打印“Hello”然后中止。
  • 你的平台和编译器是什么?这些是不是很晦涩?

标签: c printf assert


【解决方案1】:

assert 之前致电fflush(stdout)。或者,如果 stdout 没有被重定向并引用终端,则只需在消息末尾写一个换行符就足够了。默认情况下,stdout 是缓冲的(在终端上缓冲行;否则完全缓冲),因此在输出缓冲区溢出或遇到换行符(在行缓冲模式下)或 fflush 之前不会实际写入输出。

【讨论】:

    【解决方案2】:

    您是否在进行优化编译 - 因为 printfs/assert 的实际顺序可能不是您所期望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多