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

ezykj2lf  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(101)

我希望它会打破一些其他的解析,但这不是立即想到.
例如,如果我这样说:

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

字符串
我的编译器说:

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


我认为这将是一个功能,即它更容易'眼睛解析'大整数与千分隔符。我使用最近的GCC,并假设这是其他编译器/解析器/词法分析器的情况下,无论它是对象。

gmol1639

gmol16391#

语言不允许这样做(一个整数字面量是一个标记,中间的空格将它分成两个标记),但是将初始化器表示为一个计算字面量的表达式通常很少或没有开销:

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

字符串

gorkyyrv

gorkyyrv2#

它将与c++中提出的overload the space operator的能力相冲突。
(Yes我知道这不是一个严肃的建议)。
编辑:这只是一个愚蠢的事情上面,我的真实的评论是下面的部分
对我来说,在数字中加入空格的能力既会增强可读性,也会降低可读性。如果你需要阅读数字本身,这可能会让你更容易做到这一点。但我认为这也会让代码读起来更慢,因为你必须在脑海中多花一步来解析代码,而不是只看令牌的结尾。假设你对实际值不感兴趣,当阅读数字时,
我不相信有任何技术上的原因不能这样做,更多的是人们把一个数字看作是一个不可分割的标记,所以它应该这样写。我不得不说,我不知道为什么,但它会激怒我看到数字在代码中这样分解。我不能说有一个很好的理由,但它仍然是真的:)这可能只是我习惯了。

mrwjdhj3

mrwjdhj33#

您可以使用科学计数法对数字进行分组,这是安全的,最多10个数字的长度,之后的数字不保证与预期值匹配。

int i = 10e3;

字符串
这有助于你在评论41196312中给出的例子,其中另一个答案会让你做41 * 1000 * 1000 + 196 * 1000 + 312使用科学计数法,你可以这样做:

int i = 41e6 + 196e3 + 312;


我使用这种类型的解决方案,其中我处理工程符号,所以当以我们口头讨论的方式格式化时,各种频率,电阻和电压可以更容易地解析。“我们测试它到10 meg电阻”,所以在代码中我将把10e6

相关问题