关于C语言中“零无十进制整数拼写”表述的疑问
关于C语言中“零无十进制整数拼写”表述的疑问
嘿,我完全懂你的困惑——刚看到这句话的时候我也皱了皱眉,这说法确实有点反直觉对吧?咱们一点点拆解清楚:
首先得抠C语言里整数常量的语法定义:
- 十进制整数常量的规则是:必须以非零数字开头,后面跟着任意十进制数字(0-9),比如
1、123、4560这些都属于十进制整数常量。 - 而单独的
0,在C的语法里被归类为八进制整数常量——因为八进制常量的定义就是以0开头,后面可以跟可选的八进制数字(0-7),哪怕后面没有数字,单独的0也算八进制常量。
原文里说的“Zero has no decimal integer spelling”,核心是从「常量的拼写所属类型」这个角度说的:
0虽然值是0,但它的拼写属于八进制整数常量,不是十进制的;0x0是十六进制的写法,'\0'是字符常量(本质是int类型的0),同样不属于十进制整数常量;- 而
0.0是十进制的写法,但它属于浮点型常量(double类型),不是整数类型。
那有没有办法用十进制整数常量的写法表示值0呢?严格来说真没有——因为十进制整数常量必须以非零数字开头,你总不能写0以外的数字来表示0吧?比如1-1是表达式,不是常量。
说白了就是C语言的语法规则把单独的0划到八进制常量的阵营里了,所以从“十进制整数常量的专属拼写”这个角度看,确实没有对应的写法能表示值0。这就是这句话想表达的核心意思啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

