amobbs.com 阿莫电子技术论坛

标题: 发一个简单的C程序,大家觉得结果是什么呢 [打印本页]

作者: xiaoyigechaos    时间: 2014-8-16 19:04
标题: 发一个简单的C程序,大家觉得结果是什么呢
本帖最后由 xiaoyigechaos 于 2014-8-16 19:05 编辑

int c=9,d=0;
c=(c++)%5;
d=c;
问d最后的结果是几
标准C编译器下
作者: wujin715    时间: 2014-8-16 19:06
是4吧     
作者: lcl    时间: 2014-8-16 19:21
0?4?                                                         
作者: xy8800    时间: 2014-8-16 19:23
0               
作者: 谢冲    时间: 2014-8-16 19:37
5,c++先用c的值,再执行 c++
作者: advarx21ic    时间: 2014-8-16 19:56
谢冲 发表于 2014-8-16 19:37
5,c++先用c的值,再执行 c++

有可能吗?
作者: ding_ding0304    时间: 2014-8-16 20:03
0                  
作者: mo_fish    时间: 2014-8-16 20:06
advarx21ic 发表于 2014-8-16 19:56
有可能吗?

有括号不是先执行括号里面的吗
作者: weijia    时间: 2014-8-16 20:07
0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5
作者: aheadlead    时间: 2014-8-16 20:10
这种问题没意义
作者: 青春从未醒    时间: 2014-8-16 20:11
是4,算了一下
作者: aheadlead    时间: 2014-8-16 20:11
http://www.dlifep.com/?p=338
作者: aheadlead    时间: 2014-8-16 20:12
上学期学计算机语言的时候 查了些资料 写了上面一篇博客 希望对楼主有帮助
作者: abutter    时间: 2014-8-16 20:29
问个问题,什么是“标准C编译器”?
作者: 笑笑我笑了    时间: 2014-8-16 20:38
gcc 4.9.0编译结果,编译器会警告:
  1. test3.c:6:7: 警告:‘c’上的运算结果可能是未定义的 [-Wsequence-point]
  2.      c = (c++)%5;
  3.        ^
复制代码

执行结果是4,如10L所说一样,讨论起来没有意义,可能换VS编译又是一种结果了。
作者: lcofjp    时间: 2014-8-16 20:40
根本就没有所谓的“标准C编译器”,楼主玩这个就是觉得脑细胞太闲了吧。
作者: tennokoe    时间: 2014-8-16 20:44
结果和编译器有关
作者: 青春从未醒    时间: 2014-8-16 20:44
本帖最后由 青春从未醒 于 2014-8-16 20:54 编辑

我用gcc4.7结果也是4
作者: xiaoyigechaos    时间: 2014-8-16 20:46
renpeng009 发表于 2014-8-16 20:39
我擦。。。你竟然还在纠结这个问题。。。

没有纠结,我已经理解饿了,虽然这样的语句没什么意义,但确实是知识点所在,虽然很多时候是用不上的
作者: xiaoyigechaos    时间: 2014-8-16 20:48
tennokoe 发表于 2014-8-16 20:44
结果和编译器有关

对  所以我说标准C  用keil编译 结果是1  没想出来是怎么玩的
作者: 青春从未醒    时间: 2014-8-16 20:53
想起来了
int c=9;
c=(c++)%5;
这是考察 c++ 与++c的问题,区别在于c++是i先不自加,在语句完后自加,++C先自加;
所以此时有伴部分(C++)%5就是相当于9%5,结果是4
作者: zhenghe    时间: 2014-8-16 20:55
4.这个也只能考试和面试用
作者: xiaoyigechaos    时间: 2014-8-16 20:58
abutter 发表于 2014-8-16 20:29
问个问题,什么是“标准C编译器”?

应该把编译器去掉,是吧。就是ANSI C
作者: csmjmcc    时间: 2014-8-16 21:02
青春从未醒 发表于 2014-8-16 20:53
想起来了
int c=9;
c=(c++)%5;

问题是,它还需要再赋值到“C”,如何解释?
作者: wye11083    时间: 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支持比较完整。回头用CLang试一下。
作者: xiaoyigechaos    时间: 2014-8-16 21:18
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

这里的括号 有没有是不是一样的呀
先执行这个c%5=4  然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c=4
是不是这样呢
书上说,前缀和后缀形式的增值操作符都复制一份变量值得拷贝,意思好像是 这里使用的c++和c没什么关系了
作者: csmjmcc    时间: 2014-8-16 21:19
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

“然后c自增”,然后呢?还有一条指令需要执行d=c,求的d值。这个真的好糊涂。
MDK仿真结果是4,它好像不理会“C自增”了。
作者: lcofjp    时间: 2014-8-16 21:24
一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也不用担心在面试或者考试中遇到这种题,遇到这种题直接骂他SB他都不敢放屁。
作者: xiaoyigechaos    时间: 2014-8-16 21:27
本帖最后由 xiaoyigechaos 于 2014-8-16 21:28 编辑
lcofjp 发表于 2014-8-16 21:24
一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也 ...


我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5  

作者: wshtyr    时间: 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
如果这些都没有作用,那有什么意义?

不多说,上图!
attach://212802.png
attach://212803.png
attach://212804.png
作者: lcofjp    时间: 2014-8-16 21:31
xiaoyigechaos 发表于 2014-8-16 21:27
我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5  
...

我只能告诉你不必在意。中国人出的书上错误百出太正常了。我看过一些二级辅导习题什么的,错误多了去了。当然我这计算机专业是不考二级的。
作者: xiaoyigechaos    时间: 2014-8-16 21:33
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

确实没有意义,应该避免出现这样的代码
作者: momo_li    时间: 2014-8-16 21:36
这个例子告诉我们,以后写程序不要用这种写法
作者: activeleo    时间: 2014-8-16 21:49
这种写法真的不好说哦,但是从软件测评和开发角度来看++这类型的运算符是不允许轻易出现的!以前的Linux系统和驱动开发都是严格受限的,不允许出现类似的运算!
作者: csmjmcc    时间: 2014-8-16 22:05
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

这位大侠,满电脑都是C啊,佩服佩服。
作者: gamalot    时间: 2014-8-16 23:10
这毫无意义, 凡是这样写代码的, 都应该开除

Keep It Simple and Stupid, KISS


作者: y574924080    时间: 2014-8-16 23:31
看到第一眼,就想到这是序列点问题吧,结果是未定义的吧
作者: xiaozuowei118    时间: 2014-8-17 12:01
是5,应该是不会错的。下次写程序还是要注意,最好是分开写;
作者: duanll    时间: 2014-8-17 12:32
本帖最后由 duanll 于 2014-8-17 12:33 编辑

楼主闲得慌啊。。。
作者: wxty    时间: 2014-8-17 18:37
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

支持!

不过看这类问题,就感觉在浪费时间,。
作者: iquer    时间: 2014-8-17 20:07
weijia 发表于 2014-8-16 20:07
0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5

怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;
d=c;
作者: csmjmcc    时间: 2014-8-17 20:53
iquer 发表于 2014-8-17 20:07
怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;

wshtyr大侠不是把三种编译环境的结果都贴出来了吗?为什么不不劳而获呢?
作者: wye11083    时间: 2014-8-18 12:37
xiaoyigechaos 发表于 2014-8-16 21:18
这里的括号 有没有是不是一样的呀
先执行这个c%5=4  然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c ...

C标准中,++操作符是在当前语句中执行完毕之后再执行的,不是在一开始执行的。
作者: zhuzaixingfu    时间: 2014-8-18 12:40
4。c++中的++在赋值之前发生。可以看一下汇编。
作者: wye11083    时间: 2014-8-18 12:42
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一样,最后无语,不改了。
作者: ahjg_xujianxin    时间: 2014-8-18 13:53
答案应该是4
作者: yu_studio    时间: 2014-8-18 14:19
TC执行结果:5
C++两边括号去掉,结果一样
作者: xiaoyigechaos    时间: 2014-8-18 18:19
C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器
作者: 梁国俭    时间: 2014-8-18 18:35
有意思
作者: csmjmcc    时间: 2014-8-18 19:34
xiaoyigechaos 发表于 2014-8-18 18:19
C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器  ...

lcofjp大侠不是告诉你了吧,可以骂面试者神经病。
不过楼主以权威文档表述了这个命题为无解。
哈哈,可惜没人面试我,否则我也可以充满自信地骂他脑袋进水!
作者: w534172    时间: 2014-8-18 19:54
结果应当为4,但是大多数程序员不这么使用,程序会比较不好阅读,还不如多写一行,看起来也直观,但是有些公司面试就会考这些偏的东西,如运算符的优先级等等。
作者: ilikemcu    时间: 2014-8-18 20:14
楼主的答案其实不重要,按照标准C的语法书对照看下即可明白。

重要的是总是写这种可读性很差的代码,除了炫耀自己的语言功力以外,对代码的后续维护和差错等应用,一点好处都没有,那是给自己和后继者挖坑的节奏
作者: xiaoyigechaos    时间: 2014-8-18 21:55
csmjmcc 发表于 2014-8-18 19:34
lcofjp大侠不是告诉你了吧,可以骂面试者神经病。
不过楼主以权威文档表述了这个命题为无解。
哈 ...

之前看书没那么认真,这道面试题让我重新注意了一下书里面的细节。算是有所收获
如果提前把这个细节注意到了,在笔试题上注明一下书里面是这么给出的答案,不知道会是什么结果

作者: 默默七    时间: 2014-8-18 22:23
感觉是1
作者: wshtyr    时间: 2014-10-12 07:41
wye11083 发表于 2014-8-18 12:42
呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一 ...

牵一发不明原因的动全身,换个编译器就不一样,我这种有点强迫症的是不能忍的

对于这种情况,首先我会尝试看懂算法,然后把那个纠结的部分用正常的语言替换掉;如果实在看不懂,反汇编也要知道它是按照什么顺序算的。何必呢,要效率就直接汇编,这么整给后人留坑
作者: default    时间: 2014-10-12 09:27
C缺陷与陷阱
作者: dengnian602    时间: 2014-10-12 09:41
受教了 很少有人这么写吧




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4