今天同事的程序出现一个bug,定位了2天2夜,还没有定位出啥问题。
叫我帮他瞧一瞧。不就是一个bug嘛,又不是借钱,怕啥,来
熟练地打开gdb,把程序挂上去再说,调啊调,最后,发现又是一个大坑。。。
先把代码简化一下,如下:
#include int main() { int x = 5; int b = sizeof(x++); printf("%d", x); return 0;}
上面的代码,我们期待它输出的结果是:6。但是屏幕上却显示是:
结果是5啊,那就奇怪了,为什么那句x++的代码不起作用呢?难道是编译器的bug????
查了一顿资料后发现,问题出在于:sizeof这个操作符里面,该操作符在C99标准中说:
如果操作数的类型是可变长度数组类型,则对操作数求值;否则,结果为整数常量。
也就是说int b = sizeof(x++);这句代码被变成:int b = 4; 而x++并没有被执行,这就是结果是5的原因了。
sizeof还有一种奇葩的写法:
#include int main() { printf("%d", (sizeof 1)); // 注意这里 return 0;}
这样也是正确的写法,学起来,以后在项目中秀一下。。。
最后,我们再看下面的代码:
#include short func(short x) { printf("明天不用加班了,哈哈!!!%d", x); return x;}int main() { printf("%d", sizeof(func(3))); return 0;}
大家猜一下,我明天要不要加班???我猜你肯定猜错,哈哈。。。