1.4 整型常量

如果一个整型常量的第一个数字是0,这个常量就被当作八进制数。那么10和010就会代表完全不同的两个数。此外,很多C编译器会不加判断地把8和9作为十进制数(8和9不可能是八进制数)。这种奇怪的规定起源于对于八进制数的定义。例如,0195代表18^2+98^1+5*8^0,等于十进制的141或者八进制的0215。很明显,我们反对这种用法。ANSI C也禁止这种用法。

注意像这样的在上下文中对八进制数的粗心使用:

  1. struct {
  2. int part_number;
  3. char *description;
  4. }parttab[] = {
  5. 046, "left-hand widget" ,
  6. 047, "right-hand widget" ,
  7. 125, "frammis"
  8. };