smilngwang
V2EX  ›  C

一个C语言问题

  •  
  •   smilngwang · Nov 19, 2013 · 3277 views
    This topic created in 4735 days ago, the information mentioned may be changed or developed.
    int b=1,c=1,d,e;

    d=(b++)+(++b);
    e=(c++)+(c++)+(++c);

    d=4
    e=7
    arm上d=4,e=7,用的编译器是arm公司的armcc

    gcc的结果d=e=4


    gcc为什么d和e的值都是4呢?
    16 replies  •  1970-01-01 08:00:00 +08:00
    felix021
    felix021
    Nov 19, 2013❤️1
    1
    月经贴,关键词“序列点。
    darasion
    darasion
    Nov 19, 2013❤️1
    2
    这个本身就是不确定的,编译器爱怎么实现就怎么实现。
    frogs
    frogs
    Nov 19, 2013❤️1
    3
    这种问题最好的办法是看生成的汇编gcc -S。不过谁要是写这种代码真是该打。
    10iii
    10iii
    Nov 19, 2013
    4
    楼主钻牛角尖了.
    ranomex
    ranomex
    Nov 19, 2013❤️1
    5
    这个问题没有讨论的价值,也没有深究的价值。不同的编译器的实现不同,相同的编译器的不同版本的结果也不同。
    你要真问个为什么的话,只能说他编译器乐意这么处理。
    最后,给你看个链接
    http://gynvael.coldwind.pl/?id=372
    LetFoxRun
    LetFoxRun
    Nov 19, 2013
    6
    无定义行为。
    hackingwu
    hackingwu
    Nov 19, 2013 via iPhone❤️1
    7
    @LetFoxRun
    @10iii 我只想知道编译器会怎么处理会得到那个4的值。
    10iii
    10iii
    Nov 20, 2013 via iPad
    8
    @hackingwu 真想知道就看汇编吧。
    txx
    txx
    Nov 20, 2013
    9
    又是这种奇葩的东西...当初老师留了一道这样题....vc6 vs2012 clang gcc 结果基本上都不一样...
    vietor
    vietor
    Nov 20, 2013
    10
    各个编译器的编译规则都不太一样,不必纠结这种级别的东西,避免这种写法就行了。
    xgdyhaiyang
    xgdyhaiyang
    Nov 20, 2013
    11
    建议看一下这个PPT
    http://www.slideshare.net/olvemaudal/deep-c
    关键词:副作用、序列点
    bombless
    bombless
    Nov 21, 2013
    12
    undefined behavior……
    在你想要了解这样一个表达式会有什么值的时刻你就输了……
    isaced
    isaced
    Nov 21, 2013
    13
    也别怪楼主,那些考试神马的都是这样的题,无奈~
    leavic
    leavic
    Nov 21, 2013
    14
    把GCC的优化级别改成0试试,或者给C加上volatile属性。
    zonyitoo
    zonyitoo
    Nov 21, 2013
    15
    这种程序的答案就是「不知道」,因为这个行为是由编译器决定的。
    sgissb1
    sgissb1
    Nov 21, 2013
    16
    lz你这个代码属于没有意义的行为,不仅楼上说的同志们回答的问题都存在。我记得这在C++里面是左右值的问题(不知道C里面有没有),人家写C++的这个组织就没有说左右值的具体优先级啥的,只是说了作用。

    而且每每见到这种脑残面试题,我都微微一笑。

    在若干年前,记得某X汇这个2b公司确实出了3道这样的题目。但当时也有很多人喜欢出这种题目。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1867 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 06:22 · PVG 14:22 · LAX 22:22 · JFK 01:22
    ♥ Do have faith in what you're doing.