helllo,小伙伴们,大家好。这里是左左右。这期视频我们讲一下c语言中的头文件。讲视频前先设置一下我们的vscode。否则后面引用我们自己写的头文件会报错。大家改成我这样就可以了,很简单。打开test.c文件。这里我们假设已知圆的直径是10,求出圆的半径和面积。前面函数那期视频我们写过求半径的函数。



轻车熟路的再写上一遍。接着,写求面积的函数。由于求出的面积是有小数点的,所以,返回值我们用float这个数据类型。这里的Get_s函数定义时调用了前面定义好的Get_r函数。这就是C语言中函数的嵌套调用。我们接着往下写。点击运行是不是没有问题?只不过面积的小数有点多。我们在f前面加个.2就可以输出两位小数了。
目前来看这样写貌似也没有什么大问题。可是现实中完整的项目,我们不可能只有这几个函数。可能会有成百上千的函数。如果所有函数都写在test.c这一个文件中,我们到时候找main函数都费劲了。这样写很不利于代码的阅读。现实中我们写代码会将函数进行分类。然后,放到不同的c文件中。
我们尝试的做一下。先创建一个get_r.c的文件将get_r这个函数放进去。是不是报错了,这是因为test.c在调用get_r这个函数时迷路了?这时就引入头文件这个概念,头文件就起到一个导航的作用。我们接着尝试的去做一下。先创建一个get_r.h的文件。在这个文件中我们要声明函数。

就是把get_r.c中函数名都写到这里。这里函数的声明其实起到一个目录的作用。就是告诉引用这个头文件的地方。其对应的.c文件中有哪些函数。当然,正常的项目中,每个.c文件中都会定义很多同类型的函数。所以,对应.h文件中声明的函数也会有很多。回到test.c这个文件中把刚才写好的.h文件包含进去。
点击运行是不是就不报错了?同理,我们将get_s这个函数放到另外一个.c文件中。由于get_s这个函数中调用了get_r,所以,为了防止迷路,我们也要将get_r这个头文件包含进来。点击运行是不是也没有问题?其实,这样写是存在隐患的,我们在test.c和get_s.c中都包含了get_r这个头文件。

这样就会导致get_r.c中的函数被定义了两次,也就是重定义了。这里没有报错可能是因为vscode内部进行了处理。那该如何避免这种重定义呢?我们在所有.h文件中加入这3行代码。这里必须用大写而且要和对应.h文件名相同。这是头文件中的固定写法。意思就是如果没有定义这个头文件才去定义。
这就保证了同一项目中同一头文件只会被定义一次。接着,我们把所有头文件都这样写。点击运行,结果也是没有问题的,其实,使用头文件的写法是由诸多好处的。比如,你在其他项目中也要用到get_r这个函数,你只需要把get_r.和.h这两个文件复制过去就能用了。如果其他人也要用到这个函数,你把这两个文件给他发过去是不是也是可以直接使用了?
还有我们熟悉的printf这个函数,就是包含了stdio.h这个头文件就可以使用了。好的 今天的视频就到这里。您的点赞、收藏、和关注是我更新下去的最大动力。我们下期见。