◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇   再说谭浩强大师的“赋值表达式”   作者:Yush   俺开始跟着谭浩强大师的《C程序设计》第三版开始学习C语言了。学到现在, 发现的最精彩的部分,是第3章第9节第4小节“赋值表达式”(第63、64页)。   谭大师在这一小节指出“常变量不能作左值,因为常变量不能被赋值”。张 云楼同学满面疑惑举手提问:“有常量、有变量,什么叫常变量呢?” 听说张 同学跟谭大师学了10几年的C语言,从第一版学到第三版,眼看着本书发行量从 300万长到1000万,怎么连这写得是最清楚的一句话都不明白呢?赶紧翻书,发 现这也怪不得张同学:本书只讲了常量、变量,除本小节这句话外根本就没“常 变量”这仨字;突然蹦出来个新名词新概念,同学们摸不着头脑啊。课外俺又考 证了一番,本书第二版还没有“常变量”一说,但在2004年和2006年谭大师分别 出了一本《C++程序设计》和《C++面向对象程序设计》,其中有一节“用const 定义常变量”。看来,这个“常变量”果然就是eng老师课外指导张同学时说的 constant variable,即用const标识符所标识的、初始化后程序不能改变其值的 变量。好像K&R(The C Programming Language)第二版至少在10年前(也有可 能在20余年前第二版初次发行的1988年,未能考证)就按ANSI C标准全面讲述了 这个const标识符;相比之下,好像谭大师有点儿与时俱进得太慢了吧?稍微 “俱进”了一下,又有点儿太急躁太粗糙了吧?   更精彩的还是本小节那些赋值表达式的例子,那简直是在英勇地挑战脆弱的 C编译器的容忍极限。除了据“注意版本”同学说“有些版本的编译器确实是支 持”、但不幸不被本书推荐上机用的Turbo C 2.0、Turbo C++ 3.0、Visual C++ 支持、eng老师怀疑只有“谭氏版”编译器才支持、挑战极限可能没有成功的表 达式(a=3*5)=4*3外,最令人惊叹的是谭大师给出了求解步骤的这个表达式: a+=a-=a*a。多亏了谭大师的循循善诱,否则这个表达式非把俺搞“精分”了不 可。   据谭大师书中说,类似的这些赋值表达式还是“C语言灵活性的一种表现。 在第6章中将进一步看到这种应用及其优越性”。可是,俺那个程序员邻居告诉 俺,说是这种晦涩的表达式正是编程大忌;有一回他卖弄了一下,写了个类似这 样的表达式,竟然还被人骂作变态。   原本简单明了的赋值表达式竟然可以复杂到这种程度,比“茴”字的四种写 法都难。感谢谭大师,让俺终于明白了为什么很多同学都说C语言很难学,更让 俺为学完了本小节而感到无比的骄傲。 (XYS20090314) ◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇