C陷阱与缺陷
上QQ阅读APP看书,第一时间看更新

1.4 整型常量

如果一个整型常量的第一个字符是数字0,那么该常量将被视作八进制数。因此,10与010的含义截然不同。此外,许多C编译器会把8和9也作为八进制数字处理。这种多少有点奇怪的处理方式来自八进制数的定义。例如,0195的含义是1×82+9×81+5×80,也就是141(十进制)或者0215(八进制)。我们当然不建议这种用法,ANSI C标准也禁止这种用法。

需要注意以下这种情况,有时候在上下文中为了格式对齐的需要,可能无意中将十进制数写成了八进制数,例如:

struct {
          int part_number;
          char *description;
}parttab[] = {
          046,   "left-handed widget"      ,
          047,   "right-handed widget"     ,
          125,    "frammis"
};