图1没有输出 "hello world",因为fprintf不是直接把内容输出到显示器,而是先把内容输出到缓冲区,之后main函数直接返回了,返回到了启动代码,启动代码调用了main函数,main函数执行完后返回到启动代码
之后启动代码调用了exit函数退出了程序
图2输出了 "hello world",因为调用了 fflush(stdout);
图3也没有输出 "hello world"
实际上图1和图3都输出了东西只是输出的不一样而且也看不到,输出是在调用exit函数之后,输出后直接就结束程序了
当检测到stdout的缓冲区还有数据时,exit内部调用了类似 fflush(stdout);的函数,但是已经没机会显示出来了(又或者说是 显示出来了只是太快看不到而已)
我们的程序把main函数中的buf作为缓冲区,main函数返回后buf已经不存在了,这时调用的 fflush(stdout);函数会输出错误的数据
当buf是static的时候,意味着buf在整个程序的运行期间都是有效的,在main函数返回后也有效
在直接运行,不调试的情况下可以看到exit函数中调用类似 fflush(stdout);函数后输出的内容