是否有必要在单独的文件中的每个函数中写入 #include< stdio.h>?C



我最近开始学习C语言。我正在使用Eclipse,我想创建一个程序,其中每个函数都在不同的文件中。我的问题如下:

这在我的 main.c 文件中:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void) {
function();
system("pause");
return EXIT_SUCCESS;
}

我的标题.h:

#ifndef HEADER_H_
#define HEADER_H_
void function (void);
#endif /* HEADER_H_ */

和我的函数.c:

#include <stdio.h> //Necessary??
void function (void){
printf("Hellon");
}

是否有必要在每个函数中编写 #include,#include等?该程序无需在 function.c 中 #include 即可运行,但我收到警告。

提前感谢!

阅读有关 C 预处理器的更多信息(也点击此处)。您经常(并且按照惯例,因此这更像是一个好习惯而不是一个要求)会在翻译单元的开头附近(或头文件的开头附近)添加一个#include <stdio.h>预处理器 include 指令,即您的*.c源文件。当然,您只需要使用某些标准I/O函数(或类型名称如FILE,或变量如stdout)在翻译单元中包含<stdio.h>。因此,您可以避免与 I/O 无关的模块中的<stdio.h>,例如仅执行计算的代码。

当然,您不需要为每个源文件定义一个函数。在一个源文件中定义多个函数是很常见的(我什至推荐它)。特别是,您可以声明static某个内部函数并从另一个函数(在同一翻译单元中)调用它。

对于 GCC,您可能希望有一个预编译的标头(实际上必须包含其他标头),并且您可以决定将所有标准标头包含在您的header.h中。阅读有关包括警卫的信息。

你可能想在你的header.h定义(而不仅仅是声明)一些短static inline函数,希望编译器能够内联对它们的大多数调用。

您的function.c实际上需要#include <stdio.h>,因为它正在使用printf。如果您错过了包含,则需要正确声明printf

顺便说一句,如果您使用 GCC 编译,请不要忘记使用gcc -Wall -Wextra -g启用所有警告和调试信息。并尝试一次使用gcc -C -E function.c > function.i获取预处理的表单,然后使用寻呼机(或编辑器)查看生成的function.i。另请参阅此内容。

请注意,Eclipse不是一个编译器,而是一个 IDE,它是一个能够运行其他程序(如编译器、调试器等)的美化源代码编辑器。由Eclipse启动的编译器可能是GCC(或Clang/LLVM)。

另请阅读现代 C书籍。

铌。用 C 语言编程需要定义并遵循许多约定,这些约定可能因项目而异。但你最好把它们说清楚。我建议研究一些中小型自由软件项目的源代码(例如在github上)。

您只包含您正在使用的标头中声明的那些函数的相应标头。

在您的示例中,main.c- 您不需要包含#include <stdio.h>。但是,在function.c中,您确实需要包含它(stdio.h)。这是因为您正在使用代码中的函数printf

相关内容

最新更新