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

时间:2019-03-29 15:34:40

标签: c header conventions

我在此站点上读到一个答案,解释了为什么不应该总是包含所有(包括受保护的)头文件的原因-减慢了编译时间,污染了全局名称空间,等等。

但是我想特别问一下-是否总是将诸如<stdlib.h><stdio.h>之类的标准标头视为好习惯?

为什么我不应该为所有标准标头维护一个stdheaders.h的{​​{1}}文件,而只在各处都包含它?我认为这可以为我节省一些我忘记使用标准标头的函数的错误。

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

1 个答案:

答案 0 :(得分:2)

最佳做法是将每个源文件(无论是.c文件还是.h文件)仅包括所需的标头。这样做不仅可以减少编译时间,而且可以用来记录文件的功能。

以下是一些示例:

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不包含任何标头,因为它不需要它们。

如果您认为自己包含了不必要的文件,请对其进行注释并编译所有启用的警告,以查看哪些声明了所需的函数或变量。