使用C am我认为以多个零开头的文字被认为是八进制的吗?

在下面的C代码中是用于所有这些定义的八进制文字? 即使他们从多个零开始?

#define TCL_REG_BASIC 000000 /* BREs (convenience). */ #define TCL_REG_EXTENDED 000001 /* EREs. */ #define TCL_REG_ADVF 000002 /* Advanced features in EREs. */ #define TCL_REG_ADVANCED 000003 /* AREs (which are also EREs). */ #define TCL_REG_QUOTE 000004 /* No special characters, none. */ #define TCL_REG_NOCASE 000010 /* Ignore case. */ #define TCL_REG_NOSUB 000020 /* Don't care about subexpressions. */ #define TCL_REG_EXPANDED 000040 /* Expanded format, white space & comments. */ #define TCL_REG_NLSTOP 000100 /* \n doesn't match . or [^ ] */ #define TCL_REG_NLANCH 000200 /* ^ matches after \n, $ before. */ #define TCL_REG_NEWLINE 000300 /* Newlines are line terminators. */ #define TCL_REG_CANMATCH 001000 /* Report details on partial/limited * matches. */ 

从C标准,6.4.4.1第3段:

八进制常量由pre fi x 0组成,可选地后跟一个数字0到7的序列

是的,你是对的。

C11,6.4.4.1整数常数:

八进制常量由前缀0组成,可选地后跟一个数字07的序列。

是。

http://www.cplusplus.com/doc/tutorial/constants/

除了十进制数字(我们大多数人每天都使用的数字),C ++允许使用八进制数字(基数8)和hex数字(基数16)作为文字常量。 对于八进制文字,数字前面带有0(零)字符。 对于hex,它们前面是字符0x(零,x)。 例如,以下文字常量都彼此相同:

 75 // decimal 0113 // octal 0x4b // hexadecimal 

OP的例子都是八进制的,因为它们以0开头。 多个前导零或8或9的存在不会使其远离八进制。 8或9应该是一个错误。


仅供参考:C中的一些其他事件(尽管可能不是文字),其中出现十进制,八进制和hex解释。

虽然不是文字,但在printf()的格式字符串中,像"%016llx"这样的说明符不是八进制016宽度,而是标志’0’和十进制值16

对于printf() ,使用说明符"%a"输出,输出的样式为“[ – ] 0xh.hhhh p±d,”其中有效数字为hex,指数为十进制。

在转义序列中没有十进制规范。 一些样本如下:

 \' \" \? \\ \a \b \f \n \r \t \v \0 (octal) \01 (octal) \012 (octal) \0123 (bad - only up to 3) \x0 (hexadecimal) \x01 (hexadecimal) \x012 (hexadecimal) \x0123 (hexadecimal) \x01234… (hexadecimal) \u1234 (hexadecimal) \U00012345 (hexadecimal)