是否有必要在C中编写这些头文件?

时间:2011-02-05 17:22:34

标签: c header-files

我想要C中的一个Header文件列表,这些文件不需要使用它们。

示例:

scanf(), printf(),.... etc. //can be use without stdio.h
getch()...etc.   //can be used without conio.h

在使用这些(上面)方法时,是否有必要编写这些头文件(stdio.h,conio.h)?

4 个答案:

答案 0 :(得分:4)

当前标准C99不推荐使用不带原型的函数,并且可能会在下一版本中删除。这是有充分理由的。这种使用很容易出错,导致难以跟踪故障。不要那样做。

答案 1 :(得分:1)

在当前的C语言标准中,函数声明(但不是原型)是强制性的,并且原型对于像printf这样的可变函数一直是必需的。但是,您不需要包含标题;只要您具有所需的类型,您就可以自己声明/原型化这些功能。例如,使用printf,您可以执行以下操作:

int printf(const char *, ...);
printf("%d\n", 1);

但是使用snprintf,您至少需要stddef.h才能获得size_t

#include <stddef.h>
int snprintf(char *, size_t, const char *, ...);

对于非可变函数,非原型声明有效:

int atoi();

答案 2 :(得分:0)

取决于您的编译器。

对于海湾合作委员会:http://gcc.gnu.org/viewcvs/trunk/gcc/builtins.def?view=markup

答案 3 :(得分:0)

基本上你可以使用没有标题的任何C函数。标题包含这些函数的原型,可以警告错误的类型或参数数量。

所以是的,你可以不用这些标题。

但是没有你不应该这样做。

但通常你不会写这些标题,这些是由构建环境提供的。

由于这些检查只是C中的警告,因此您应该打开这些警告并将其视为错误。否则你会遇到非常糟糕的C经验。

在gcc中,您应始终使用选项-W -Wall运行并避免这些警告。

BTW这些不是方法,而是功能。

附录:,因为您要将所有警告视为错误,您可能会将-Werror打开,这会将所有警告变为错误,只需执行此操作。

就我个人而言,我没有使用这个选项,但最终要清除所有警告。这使得可以忽略警告一段时间,并且通常在我提交版本控制之前进行清理。

但对于群组而言,使用-Werror执行此操作是有意义的。在允许提交之前运行测试脚本。