□ 0で始まる数値は 8進数

 C言語では 0で始まる数値は10進数でなく、8進数になります。

 大部分の人にとっては、紛らわしい、邪魔な仕様のように思います。 UNIX のファイル属性の指定のように3ビット一塊の値を設定するに 都合がよいのでしょうが、そう用途はめったにないですし、それよりも上位桁を 0詰めした 10進数表現がソース中に出来ない、と言うことのほうが不便でしょう。 とくにアセンブラやBASIC等の他言語でそのような書き方をしていた方には、慣れないうちは ストレスの溜まるようなことかもしれません。

 たとえば、アセンブラのソースならば

  tbl: dc.w 0001,1002,0024,0550
     dc.w 0123,4567,8910,0101

のようにかくテーブルをCのソースで、

  int tbl[] = {
    0001,1002,0024,0550,
    0123,4567,8910,0101,
  };

のように直接書くことはないかもしれませんが、アセンブラやBASICのソースから コピーして書きかえるときには、つい、やってしまうかもしれません。
 実際には 8 や 9が混ざっていてエラーか警告がでるでしょうし、あまりに 基本的な注意事項なのでこのようなヘマはしないのが普通でしょうが。

 結局はCに慣れるしかなく、テーブルの桁合わせは空白で行い、また、 数値の頭が 0かどうか視認しやすくなるよう、数値の前に必ず空白を置くなど の工夫をしたほうが無難だとなります。

  long tbl[] = {
      1, 1002,  24, 550,
     123, 4567, 8910, 101,
  };

 この程度ならば視認できますが、数百以上のデータがざっとみて数値で綺麗に 桁揃えされていると、そのうち数個が 0で始まるデータだったとしても気付けない ような気がします。そういうテーブルを見るとバグの可能性を思い浮かべるように なるのもいいかもしれません。 もっともそのようなデータは手書きでなく自動性生成のことが 多いですし、どうしても桁揃えたいとか思う方は、問題なければ、16進数で表現 しちゃうのも手でしょう。


 あと。  拘る人からすれば 0 と書けば8進数であって C言語では0の10進表現はない、 という話もあります。 んなこと知らんかて10進数と思っても不都合ないわい、と思ってもいい類でしょうが。