Cualquier valor entero con el prefijo 0
es un valor octal. Es decir: 01 es octal 1, 010 es octal 10, que es decimal 8, y 0 es octal 0 (que es decimal, y cualquier otro, 0).
Entonces sí, '0' es un octal.
Esa es una simple traducción al inglés del fragmento de gramática en la respuesta de @ Als :-)
Un entero prefijo 0x
está no con el prefijo 0
. 0x
es un prefijo explícitamente diferente. Aparentemente hay personas que no pueden hacer esta distinción.
Según ese mismo estándar, si continuamos:
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
decimal-literal:
nonzero-digit <<<---- That's the case of no prefix.
decimal-literal digit-separatoropt digit
octal-literal:
0 <<<---- '0' prefix defined here.
octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
allowed here.
hexadecimal-literal:
0x hexadecimal-digit <<<---- '0x' prefix defined here
0X hexadecimal-digit <<<---- And here.
hexadecimal-literal digit-separatoropt hexadecimal-digit