我在此站点上读到一个答案,解释了为什么不应该总是包含所有(包括受保护的)头文件的原因-减慢了编译时间,污染了全局名称空间,等等。
但是我想特别问一下-是否总是将诸如<stdlib.h>
和<stdio.h>
之类的标准标头视为好习惯?
为什么我不应该为所有标准标头维护一个stdheaders.h
的{{1}}文件,而只在各处都包含它?我认为这可以为我节省一些我忘记使用标准标头的函数的错误。
具体来说,我想知道什么是C开发中的标准实践。谢谢
答案 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不包含任何标头,因为它不需要它们。
如果您认为自己包含了不必要的文件,请对其进行注释并编译所有启用的警告,以查看哪些声明了所需的函数或变量。