2024年7月22日月曜日

cで0始まりの数字は8進数と認識されるため08と09はエラーになる


cのプログラムで日付を数字2文字で定義していると8と9で下記のエラーが発生して戸惑いました。
int day = 08;
error: invalid digit "8" in octal constant

int day = 09;
error: invalid digit "9" in octal constant

調べたところ、c言語では0始まりの表示は8進数定数(octal constant)と解釈されると分かりました。
8進数表記で利用できるのは「01234567」なので8と9はそれから外れるためエラーになりました。

0始まりの桁表示を利用して01なら動くからと油断すると、08 09 で動かなくなるので注意です。

参考
Whats wrong with array declaration: "invalid digit in octal constant"?
DCL18-C. 10 進値を指定するとき、整数定数を 0 で始めない
C 整数定数

0 件のコメント :