为什么C解析器不允许整数字面值的数字之间有空格



我预计它会破坏其他一些解析,但这并没有立即出现在脑海中…

。如果我这样写:

#include <stdio.h>
int main()
{
    int i = 10 000;
    printf("%dn", i);
    return 0;
}

我的编译器说:

ctest.c:5: error: expected ‘,’ or ‘;’ before numeric constant

我认为这将是一个功能,即更容易"眼解析"带有数千个分隔符的大整数。我正在使用最近的GCC,并假设其他编译器/解析器/词法分析器也是如此;

语言不允许这样做(整数字面值是一个标记,中间的空格将它分成两个标记),但是将初始化式表示为一个计算字面值的表达式通常几乎不会产生任何开销:

int i = 10 * 1000; /* ten thousand */

这将与c++中建议的重载空间操作符的能力相冲突。

(是的,我知道这不是一个严肃的提议)。

编辑:这只是上面一个愚蠢的事情,我真正的评论是下面的部分

对我来说,在数字中加入空格既可以增强可读性,也可以降低可读性。如果您需要阅读数字本身,这可能会使它更容易做到这一点。但我认为它也会使代码阅读速度变慢,因为您必须在头脑中进行额外的一步解析代码,而不仅仅是查看令牌的末尾。假设您在读取数字时对它的实际值不感兴趣。

我不相信有任何技术上的原因不能这样做,更多的是人们认为一个数字是一个不可分割的标记,所以它应该这样写。我不得不说,我也不知道为什么,但看到数字在代码中这样分解会让我很恼火。我不能说这是一个很好的理由,但它仍然是真的:)这可能只是我习惯了。

最新更新