※ [本文转录自 Soft_Job 看板 #1LEb-bDg ]
作者: ah7675 (阿懋) 看板: Soft_Job
标题: [闲聊] i++ is undefined behavior?
时间: Fri Apr 24 23:22:09 2015
最近因为同事在code review时表示 i++会随编译器实作而有不同行为
所以要求我不要用这种写法,到这边应该很多人会说:"没错啊,这你都不懂?"
关键在于他举的例子是这样的
i=10;
val = array[i++];
val equals array[10] or array[11]?
我整个傻住了,我的理解是,答案绝对是val=array[10]
而随编译器会变化的地方是,在该expression/statement所构成的
数个指令中"递增"的时机可能不同,所以如果在一个expression中存取i
两次以上会造成未定义行为
但suffix increament operator必定是先return再递增
请问我的理解才是错的吗?
那GLIBC里的strcmp实作也是不可靠的吗?
https://fossies.org/dox/glibc-2.21/string_2strcmp_8c_source.html
还有另一个例子是说const global variable is better than Macro??
理由是global variable只有一份、用再多次也只是reference同一份
但是macro假设被使用10次就会造成code size增加10倍
用来举例的型别是int
这也是颠覆了我一直以来的观念,让我相当震撼
我应该赶快请前辈喝饮料顺便多请教他,还是趁试用期还没过赶快离职?
请各位给我一些意见,感谢!