![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C语言的编写时,头文件只能有一个吗!
展开全部
当然不
#include 的本质就是把对应的文件直接拷贝到这一行里面
要理解头文件,主要是要理解“声明”
C/C++中,所有使用到得变量、函数、类都要是声明过得,就是说,要有一行语句来告诉编译器,我有一个名字叫XXX的???类型的变量(函数、类)。
然后还有一个因素就是,在编译的时候,程序是按照每个.C或.CPP文件单独编译的。
也就是说,对于每个C文件中,如果都用到了同一个函数(比如printf),那么,我在每个对应文件中写一遍printf的声明明显是很麻烦的。所以我把这个声明单独写了一个文件,为了区别,我把扩展名记做.h,在需要使用对应的函数(类)的时候,我就不需要去拷贝函数的声明,而只需要#include对应头文件就可以了,系统自动帮你拷贝进来——C语言提供的头文件,按照函数功能分类好了,比如数学函数就都写在了math.h里面,一包含就全包含,不管你用没用到cos()这个函数或者其他什么。
当然,由于.h文件中也可以包含其他.h文件,所以为了不重复声明或定义,需要用宏做相应的处理,这个不是要理解的东西,而是照着写。
看到你的补充,在这里我也补充下答案
对于自己定义的函数,首先,肯定的是,你至少需要在一个C文件中定义它,否则链接会出错。当你想在任何一个文件中使用的时候,你只需要让这个文件包函数声明所在的头文件即可。
具体来说:
a.h中声明了了
int a( int x);
a.c中实现这个函数,需要有类似代码
#include "a.h"
//.....其他代码
int a(int x)
{
return x*x;
}
如果在b.c中想使用这个,则只要在b.c中这样就可以:
#include "a.h"
//....其他代码
x = a(x);
//...其他代码
#include 的本质就是把对应的文件直接拷贝到这一行里面
要理解头文件,主要是要理解“声明”
C/C++中,所有使用到得变量、函数、类都要是声明过得,就是说,要有一行语句来告诉编译器,我有一个名字叫XXX的???类型的变量(函数、类)。
然后还有一个因素就是,在编译的时候,程序是按照每个.C或.CPP文件单独编译的。
也就是说,对于每个C文件中,如果都用到了同一个函数(比如printf),那么,我在每个对应文件中写一遍printf的声明明显是很麻烦的。所以我把这个声明单独写了一个文件,为了区别,我把扩展名记做.h,在需要使用对应的函数(类)的时候,我就不需要去拷贝函数的声明,而只需要#include对应头文件就可以了,系统自动帮你拷贝进来——C语言提供的头文件,按照函数功能分类好了,比如数学函数就都写在了math.h里面,一包含就全包含,不管你用没用到cos()这个函数或者其他什么。
当然,由于.h文件中也可以包含其他.h文件,所以为了不重复声明或定义,需要用宏做相应的处理,这个不是要理解的东西,而是照着写。
看到你的补充,在这里我也补充下答案
对于自己定义的函数,首先,肯定的是,你至少需要在一个C文件中定义它,否则链接会出错。当你想在任何一个文件中使用的时候,你只需要让这个文件包函数声明所在的头文件即可。
具体来说:
a.h中声明了了
int a( int x);
a.c中实现这个函数,需要有类似代码
#include "a.h"
//.....其他代码
int a(int x)
{
return x*x;
}
如果在b.c中想使用这个,则只要在b.c中这样就可以:
#include "a.h"
//....其他代码
x = a(x);
//...其他代码
![](https://ecmc.bdimg.com/public03/b4cb859ca634443212c22993b0c87088.png)
2024-08-21 广告
MarsCode 为你提供了编程助手和 IDE 来协助你完成编程任务。 MarsCode 编程助手提供以智能代码补全为代表的 AI 功能。它支持主流的编程语言和 IDE,在开发过程中提供单行代码或整个函数的编写建议。此外,它还支持代码解释、...
点击进入详情页
本回答由MarsCode提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询