当前位置:  技术问答>linux和unix

奇怪的执行顺序,不知是否和gcc版本有关

    来源: 互联网  发布时间:2016-01-29

    本文导语:  现有如下的C程序: /* test.c */ #include  int main() {     printf("Strange Hello World");     while(1){};         return 0; }   理论上程序的执行结果应是在终端中输出Strange Hello World然后陷入死循环。但奇怪的是实际...

现有如下的C程序:
/* test.c */
#include 

int main()
{
    printf("Strange Hello World");
    while(1){};
   
    return 0;
}

  理论上程序的执行结果应是在终端中输出Strange Hello World然后陷入死循环。但奇怪的是实际的执行结果是“Strange Hello World”这条消息根本没有输出就进入了死循环!之后把printf语句改为
printf("Strange Hello Worldn");
  增加了一个换行符,程序的执行结果就跟理论一样了。后来以为是不是输出的消息末尾为转义字符就可以,但把‘n’换成‘t’也不行。编译后的汇编代码如下:
    .file    "test.c"
    .section    .rodata
.LC0:
    .string    "Strange Hello World"
    .text
.globl main
    .type    main, @function
main:
    leal    4(%esp), %ecx
    andl    $-16, %esp
    pushl    -4(%ecx)
    pushl    %ebp
    movl    %esp, %ebp
    pushl    %ecx
    subl    $4, %esp
    movl    $.LC0, (%esp)
    call    printf
.L2:
    jmp    .L2
    .size    main, .-main
    .ident    "GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
    .section    .note.GNU-stack,"",@progbits
  汇编代码显示程序是确实是调用printf之后再执行死循环的,与理论估计相同。编译器的版本GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-3)"
,操作系统Fedora Core 5,机器平台为Intel(R) Pentium(R) 4 CPU 3.00GHz,主板华硕P4P800。

|
stdout的缓存所致,和gcc没关系

|
stdout在终端输出时是行缓存, 其他情况下是全缓存.
由于是行缓存, 只有在遇到换行或者程序结束时才会输出.

|
楼上正解!
要习惯在printf的最后加上"n"。

|


stdout在终端输出时是行缓存, 其他情况下是全缓存.
由于是行缓存, 只有在遇到换行或者程序结束时才会输出.
--------------------------------
正解
或则你也可以强制刷新到屏幕上:
fflush(stdout);

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪,真奇怪,在线等待
  • shm_open函数问题.奇怪!!!奇怪!!!!!
  • 奇怪奇怪...........?????...........
  • solaris上的C程序,编译报错: 存储类只能使用register,奇怪,奇怪!
  • 奇怪!奇怪!我用jbuilder编jsp程序,从数据库中取出的字符串型字段却显示16进制数
  • 奇怪的问题 奇怪的问题,向大家请教
  • 奇怪啊,奇怪,为什么我的JB7做EJB时,只要在EJB设计面板上随便做点东西,我的EJB的JAVA的源码就会变的不见了,或者少了很多字段申明??
  • 奇怪,CSDN的贴子,提问部分我最多能看到第4行??!!
  • accept,recvfrom接收到奇怪的ip
  • 好奇怪的问题哎………………怎么也不能安装!
  • 一个特奇怪的函数申明错误
  • unix下的非常的奇怪WC的问题,向unix高手请教 好急呀!!!!!!!!!!!!!!!
  • 奇怪!关于字串参数的问题?
  • 一个奇怪的路径问题
  • 一些奇怪的现象,帮帮我
  • !!!初学Java,遇到一个奇怪问题,请大家回答!!!
  • SOCKET发送奇怪问题!!!
  • 奇怪的四分之一屏!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3