当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

CODE COMPLETE 中的代码错误

  最近比较闲,就看了那本放在书架上很久的“砖头”著作--经典的《CODE COMPLETE (Second Edition)》。当然是中文版的,这种大块头的书看英文版是非常累的。
    看到第18章表驱动法Table-Driven-Methods时,感觉这种方法非常好,而我以前也从来没用过这种方法。于是就多看了两眼,没想到就是这多看的两眼,竟然让我在在C++示例代码中发现了大师级作者Steve McConnell犯的2个低级错误!
    在18.2直接访问表Direct Access Tables的例子:灵活的消息格式Flexible-Message-Format Example小节中,有下面这几段代码:
// 第1段(P420)
enum FieldType {
   FieldType_FloatingPoint,
   FieldType_Integer,
   FieldType_String,
   FieldType_TimeOfDay,
   FieldType_Boolean,
   FieldType_BitField,
   FieldType_Last = FieldType_BitField
};

// 第2段(P422)
AbstractField* field[ Field_Last ];

// 第3段(P422)
field[FieldType_FloatingPoint ] = new FloatingPointField();
field[ FieldType_Integer ] = new IntegerField();
field[ FieldType_String ] = new StringField();
field[ FieldType_TimeOfDay ] = new TimeOfDayField();
field[ FieldType_Boolean ] = new BooleanField();
field[ FieldType_BitField ] = new BitFieldField();

// 第4段(P423)
fieldIdx = 1;
while ( ( fieldIdx <= numFieldsInMessages ) && ( fieldStatus == OK ) ) {
   fieldType = fieldDescription[ fieldIdx ] .FieldType;
   fieldname = fieldDescription[ fieldIdx ].FieldName;
   field[ fieldType ].ReadAndPrint( fileName, fileStatus);
}
    我们先来看第1段代码。在C++中,枚举类型的值在默认情况下是从0开始的。所以,代码中的FieldType_FloatingPoint值为0,而FieldType_BitField的值为5。那么FieldType_Last的值也是5。
    再看第2段代码。从上面的分析可以得出,第2段代码跟下面的代码是等价的:

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接