找回密码
 欢迎注册
查看: 39144|回复: 18

[灌水] 测试c99编译功能

[复制链接]
发表于 2010-9-17 14:55:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
  1. #include <stdio.h>
  2. int swap_words(int x)
  3. {
  4. short *p = (short *)&x;
  5. short a=p[0],b=p[1];
  6. p[0]=b;p[1]=a;
  7. return x;
  8. }
  9. int main()
  10. {
  11. printf("%d\n",swap_words(1));
  12. }
复制代码
这个代码在gcc中用-O2或-O3编译,运行结果是1。但是如果用-O1,结果是65536. 大家可以用自己机器的编译器测试一下看看。 另外,如果short*全部改成char*,就看不到这种现象了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-17 20:03:35 | 显示全部楼层
1# mathe 我没有加优化,运行结果有好多的2,
C:\Users\Lenovo\Desktop>gcc test.c C:\Users\Lenovo\Desktop>a 2228225 C:\Users\Lenovo\Desktop>gcc -O1 test.c C:\Users\Lenovo\Desktop>a 1 C:\Users\Lenovo\Desktop>gcc -O2 test.c C:\Users\Lenovo\Desktop>a 0 C:\Users\Lenovo\Desktop>gcc -O3 test.c C:\Users\Lenovo\Desktop>a 0 C:\Users\Lenovo\Desktop>
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-17 20:07:32 | 显示全部楼层
把所有的short 替换成char以后,没加O 的,运行结果变了,是2293505,加了O之后,结果跟上面的一样
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-9-18 08:00:30 | 显示全部楼层
呵呵,你的编译器版本多少,结果有点奇怪, 如果结果是1,65536,65537都好解释。要不然你看一下汇编代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-18 08:12:28 | 显示全部楼层
存成.c文件编译,警报:warning C4716: 'swap_words' : must return a value 在 VC6 下,Debug版(/Od):1179648 在 VC6 下,Release版(/O1 或 /O2):2009274936
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-9-18 09:23:25 | 显示全部楼层
是我在swapword函数最后忘了return x;了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-18 09:33:06 | 显示全部楼层
加上后,在 VC6 下就都是 65536 了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-9-18 09:46:10 | 显示全部楼层
vc6有点旧了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-19 09:24:19 | 显示全部楼层
这跟编译器应该没有关系,在32位机器上应该结果都是一样的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-9-19 21:13:15 | 显示全部楼层
最近尝试的最小的图形化的操作系统是128M内存急速运行 当然别启动浏览器 郭,有兴趣用虚拟机虚拟个,可以获得原生的gcc支持 这个系统叫AntiX
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-23 13:15 , Processed in 0.045801 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表