始终包含标准 headers 是一种好习惯吗?

Is it good practice to always include the standard headers?

我在这个网站上阅读了一个答案,解释了为什么不应该总是包含所有 (include-guarded) header 个文件 - 会减慢编译时间,污染全局命名空间等。

但我想具体问一下 - 是否始终包括标准 header,例如 <stdlib.h><stdio.h> 被认为是好的还是坏的做法?

为什么我不应该为所有标准 header 维护一个带有 #includestdheaders.h 文件,而只是将其包含在所有地方?我认为这可能会在我使用忘记包含标准 header 的函数时为我节省错误。

具体来说,我想知道什么是 C 开发中的标准做法。谢谢

最佳做法是每个源文件,无论是 .c 文件还是 .h 文件,只包含它需要的 headers。这样做不仅可以减少编译时间,还可以用来记录文件的功能。

这里有几个例子:

f1.c:

#include <stdio.h>

void print_int(int i)
{
    printf("i=%d\n", i);
}

f2.c:

#include <stdlib.h>

void *safe_malloc(size_t size)
{
    void *p = malloc(size); 
    if (!p) exit(1);
    return p;
}

f3.c:

int sum(int a, int b)
{
    return a+b;
}

文件f1.c只包含stdio.h,因为它有I/O但没有其他功能。同样,f2.c 只包含 stdlib.h,因为它使用那里定义的函数,但不使用任何 I/O 函数,而 f3.c 不包含任何 headers,因为它不需要它们。

如果您认为您包含了不必要的文件,请将它们注释掉并在启用所有警告的情况下进行编译,以查看哪些文件声明了您需要的函数或变量。