最近开始学习C。我正在使用 Eclipse,我想创建一个程序,其中每个函数都在不同的文件中。我的问题如下:
这在我的 main.c 文件中:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void) {
function();
system("pause");
return EXIT_SUCCESS;
}
我的header.h:
#ifndef HEADER_H_
#define HEADER_H_
void function (void);
#endif /* HEADER_H_ */
还有我的函数.c:
#include <stdio.h> //Necessary??
void function (void){
printf("Hello\n");
}
是不是每个函数都要写#include
提前致谢!
最佳答案
阅读更多关于 C preprocessor 的信息(还有 here )。您经常(并且按照惯例,所以这是一个好习惯而不是要求)会添加 #include <stdio.h>
预处理器 include directive在翻译单元的开头附近(或在头文件的开头附近),即您的 *.c
源文件。当然你需要包括<stdio.h>
仅在使用某些标准 I/O 函数(或类似 FILE
的类型名称,或类似 stdout
的变量)的翻译单元中。所以你可以避免 <stdio.h>
在与 I/O 无关的模块中,例如仅执行计算的代码。
您当然不需要为每个源文件定义一个函数。在一个源文件中定义多个函数是很常见的(我什至推荐这样做)。特别是,您可以声明 static
一些内部函数并从另一个函数调用它(在同一个 translation unit 中)。
您可能需要 GCC , 有一个 pre-compiled header (实际上必须包括其他的),并且您可以决定将所有标准 header 包含在您的 header.h
中。 .了解 include guards .
您可能想要定义(不仅是声明)一些短的 static inline
在您的 header.h
中发挥作用,希望编译器会 inline大多数电话给他们。
你的 function.c
实际上需要 #include <stdio.h>
因为它正在使用 printf
.如果你错过了那个包含你需要正确声明printf
.
顺便说一句,如果你用 GCC 编译,不要忘记启用所有警告和调试信息,使用 gcc -Wall -Wextra -g
.并尝试使用 gcc -C -E function.c > function.i
获取预处理后的表单然后用pager看(或编辑器)进入生成的 function.i
.另见 this .
请注意 Eclipse 不是 compiler 但是一个 IDE ,那是荣耀的source code editor能够运行其他程序(如编译器、调试器等)。您的编译器 - 由 Eclipse 启动 - 很可能是 GCC(或 Clang/LLVM )。
另请阅读 Modern C书。
注意。用 C 语言编程需要定义和遵循许多约定,这些约定可能因项目而异。但你最好把它们明确化。推荐研究一些中小型的源码free software项目(例如 github )。
关于c - 是否需要在单独文件中的每个函数中编写#include<stdio.h>? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097025/