测试c99编译功能
#include <stdio.h>
int swap_words(int x)
{
short *p = (short *)&x;
short a=p,b=p;
p=b;p=a;
return x;
}
int main()
{
printf("%d\n",swap_words(1));
}
这个代码在gcc中用-O2或-O3编译,运行结果是1。但是如果用-O1,结果是65536.
大家可以用自己机器的编译器测试一下看看。
另外,如果short*全部改成char*,就看不到这种现象了 1# mathe
我没有加优化,运行结果有好多的2,:Q:
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>
把所有的short 替换成char以后,没加O 的,运行结果变了,是2293505,加了O之后,结果跟上面的一样 呵呵,你的编译器版本多少,结果有点奇怪,
如果结果是1,65536,65537都好解释。要不然你看一下汇编代码 存成.c文件编译,警报:warning C4716: 'swap_words' : must return a value
在 VC6 下,Debug版(/Od):1179648
在 VC6 下,Release版(/O1 或 /O2):2009274936 是我在swapword函数最后忘了return x;了 加上后,在 VC6 下就都是 65536 了。 vc6有点旧了 这跟编译器应该没有关系,在32位机器上应该结果都是一样的 最近尝试的最小的图形化的操作系统是128M内存急速运行
当然别启动浏览器
郭,有兴趣用虚拟机虚拟个,可以获得原生的gcc支持
这个系统叫AntiX
页:
[1]
2