- 论坛徽章:
- 0
|
本帖最后由 pmerofc 于 2010-04-06 22:17 编辑
应某出版社之约,拟就国内C语言“主流教材”中的错误、误导和不良风格等写点东西。
在正式动笔之前和大家(除了“星宿”派的弱智以外)交流一下,非常希望能得到大家的批评、指正和建议。
QUOTE:赋值表达式也可以包括复合的赋值运算符。例如:
a+=a-=a*a
也是一个赋值表达式。如果a的初值为12,此赋值表达式的求解步骤如下:
①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=132。
②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。
p64,《C程序设计》(第三版),谭浩强 著,清华大学出版社,2005年7月第3版,2009年10月第26次印刷
评:“a+=a-=a*a”这个表达式本身就是错误的,怎么居然还能分析出求解步骤呢?
]
谭的书虽然写得不好,风格差
但:就你这个白痴水平,还评论别人,佩服你
看看编译器是怎样编译的:
a+=a-=a*a;
010A34B5 8B 45 F8 mov eax,dword ptr [a]
010A34B8 0F AF 45 F8 imul eax,dword ptr [a]
010A34BC 8B 4D F8 mov ecx,dword ptr [a]
010A34BF 2B C8 sub ecx,eax
010A34C1 89 4D F8 mov dword ptr [a],ecx
010A34C4 8B 55 F8 mov edx,dword ptr [a]
010A34C7 03 55 F8 add edx,dword ptr [a]
010A34CA 89 55 F8 mov dword ptr [a],edx
--------------------------------------------------------------------
看看谭的分析,是错了还是对了
可能有些编译器会出现未定义行为
总比你一句话就说错误强多了,还评论,你不笑死人
我不是谭迷,只不过为他说了两句,就被你冠上谭迷,正白痴
真想,见你一次就骂你一次:白痴 |
|