这个标题中并不包含对“谭浩强”先生的任何攻击之意
只是鉴于其在中国C语言的“统治地位”,而我们所要讨论的话题也和他有着莫大的联系
所以只好拿他开刀了
如果你正在使用(或使用过)或者类似的国内的教材
或许你将看到类似于下面这样的段落
然而实际上讨论这种运算是没有任何意义的,为什么这样说呢?我们可以尝试下面的这个程序
#include <stdio.h> int main() { int foo = 5; foo=(++foo)+(++foo)+(++foo); printf("%d",foo); return 0; }
按照文中的说法,这个程序的运行结果应该是24
如果你使用的是codeblocks等使用gcc为编译器的环境,那么你将得到22的结果
是书错了还是编译器错了?
答案是书……
实际上,这个程序中的算式可以得到任何结果,而原因正是我们下一篇文章所要讨论的内容
这是一个未定义行为(Undifined Behavior,UB行为)
就是说标准中并没有对这种行为的结果做出规定
因此这种写法是不安全的,无法保证你得到的结果是你所期望的!
在任何一本负责的书上都应该明确的指出这种危险的行为,例如《C Primer Plus》
而国内的各种教材对此给出的“详解”,或许是国内教育体制所折射出的问题之一吧……
因此,如果你在任何一本c语言书上看到了如上的程序,并且详细的教你如何分析,那么100%可以肯定,这一定是一本垃圾书!