一个C语言问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
smilngwang
V2EX    C

一个C语言问题

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

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

    在若干年前,记得某X汇这个2b公司确实出了3道这样的题目。但当时也有很多人喜欢出这种题目。
    About     Help     Advertise     Blog     API     FAQ     Solana     1105 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 65ms UTC 18:27 PVG 02:27 LAX 11:27 JFK 14:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86