1. 127页,最后一段
原文:
这样,如果允许嵌套注释,上面的表达式就等效于“*/”;如果不允许,那么就等效于"/*"。
应该为:
这样,如果不允许嵌套注释,上面的表达式就等效于“*/”;如果允许,那么就等效于"/*"。
可以将127页的测试例子和128页的测试例子,在一个C++工程里测试一下便知,估计是原始版本的错误。
2. 125页,第四段
原文:
我们知道,再怎么不可能发生的事情,某些时候还是有可能发生的。一个健壮的程序应该预先考虑到这种异常情况。
实际上,这里作者想要表达的意思应该是:
“看起来不会发生的事情”在某些情况下还是有可能发生的。一个健壮的程序应该预防异常情况可能带来的严重后果。
3. 97页,页尾的代码
原文:
toupper(int c)
{
if ( c >= 'a' && c <= 'z' )
c += 'A' ? 'a';
return c;
应该为:
toupper(int c)
{
if ( c >= 'a' && c <= 'z' )
c += 'A' - 'a';
return c;
原版就是这样,没有试过,改为“?”是否可以。
4. 98页,页首的代码
与勘误三一样,应该为“-”
5. 151页,从上往下数第三段
应为“...因此,一个非常小的数值即使不是0,也有可能输出0;而一个很大的数值,...”
6. 107页,页尾
应为“...并不需要实际支持3种不同长度的整数,但不能够让short型整数大于int型整数...”
书中的翻译没有强调出不能。
7. 85页,5.2节第一段
应为“许多系统中的标准I/O库都允许一个单一的文件对于输入和输出来说,是同时处于打开状态的:”
书中的翻译混淆了什么或谁可以同时,即同时性的对象。书中的翻译是“同时进行写入和读出”,意思错了,看下文的解释便知。
8. 85页,5.2节第三段
应为“...遗憾的是,事实总是难遂人愿,为了保持与在能够使用这个选项之前写出来的程序的向下兼容性,一个读取操作不能随后直接紧跟着一个写入操作而没有插入对fseek函数的调用,反之亦然。”
原书的翻译再次犯了同时性的错误,而且对插入fseek函数的意义解释错了。
9. 89页,5.4节最后代码
应为:
/* 调用库函数 */
if ( 错误返回 )
检查 errno
10. 151页,关于%%格式项的说明
应为“%%格式项用于打印出一个%字符。它是唯一的一个在使用时不需要对应参数的格式项。”
书中的翻译不如这样译直白。
2009年4月2日