为什么程序员经常使用像'40 +1'这样的习语而不是实际的数字?

时间:2015-02-20 23:22:58

标签: c coding-style

我偶然发现了以下代码片段:

char firstname[40+1];
char lastname[40+1];

为什么这个人不只是使用41作为数组长度?为什么他还使用像41这样的奇数?

我现在无法提供任何例子,但我已经多次看过这种模式,并且从未理解它的重点。

3 个答案:

答案 0 :(得分:7)

我们这样做的原因相同:

double normal_pdf(double x) {
    return (1.0 / sqrt(2.0 * pi)) * exp(x * x / 2.0);
    // or even...
    return (1.0 / sqrt(8.0 * atan(1.0)) * exp(x * x / 2.0);
}

而不是......

double normal_pdf(double x) {
    return 0.3989422804014327 * exp(x * x * 0.5);
}

这两个版本将产生相同的机器代码,具有一个不错的优化编译器,但第一个版本显然是正确的而第二个版本可能是错误的 - 或者至少它需要更长的时间人类读者验证代码是否正确。

我怀疑在char field[40+1]的情况下,+1用于保存NUL终结符,并且该字段的最大长度为40个字符。

答案 1 :(得分:5)

只是提醒您或其他读取/修改此代码的人,实际的char数组的大小为x。加1表示空终止符。

在C中,事情发生得如此之快,以至于提高可读性的任何事情都值得花时间。

答案 2 :(得分:2)

char firstname[40+1];

40 + 1用于使其明确表示数组可以包含长度为40的字符串,但为空终止符保留1字节。长度为N的字符串的大小为N + 1个字节(即,字符串对象的sizeofN + 1)。它用于文档目的。