还记得我们写的第一个C语言程序吗?
#include <stdio.h>
int main(){
printf("hello,world!\n");
return 0;
}
C语言的语法规定,要想将输入结果打印到控制台,可以使用printf()函数。
而这个printf()函数是存在一个叫stdio.h的标准库中的。因此要想使用它,必须引入该标准库或者说该头文件。
而这些头文件中,包含了很多封装好的函数、变量等信息。但是,它始终不可能包含一切我们想要的东西。如果我们还想要其他函数或者结构体怎么办?
当然了,可以在一个main.c文件中定义嘛。🫢
针对少量代码确实可以,但是如果所写的项目比较大,这种方式就显得非常的累赘,特别不便于阅读和维护。
为此,我们特别希望进行模块化开发,把相似的功能抽取成单独的模块,各自成为不同的文件,使用时只需要引入这些文件对应的结构即可。
话不多说,现在开干!
我们以Clion集成开发环境为例,当然也可以选择vs等等,道理是一样的。
先创建一个C项目。
myFunction.h
这是一个头文件,头文件的名称可以自定义,但是必须是.h结尾。?
#ifndef HEADDEMO_MYFUNCTION_H
#define HEADDEMO_MYFUNCTION_H
void hello();
int sum(int n1, int n2);
int multiply(int n1, int n2);
#endif //HEADDEMO_MYFUNCTION_H
我们定义的函数声明,当然也可以直接写函数。?
myFunction.c
?该头文件中声明的函数在这里实现。
//
// Created by hssym on 2024/1/23.
//
#include <stdio.h>
void hello() {
printf("hello,hello,hello");
}
int sum(int n1, int n2) {
return n1 + n2;
}
int multiply(int n1, int n2) {
return n1 * n2;
}
main.c
最后,就可以在主函数中使用我们自定义的函数了。
和标准库不一样的地方是,使用我们自定义的头文件需要用双引号"",而标准库是用尖括号<>。?
#include "myFunction.h"
int main() {
hello();
return 0;
}
运行看看结果:?
?我们自定义的头文件中还定义了带返回值的函数,下面我们使用看看,注意主函数中打印出来,还需要引入printf()函数的标准库哦。
#include "myFunction.h"
#include <stdio.h>
int main() {
hello();
printf("\n%d\n", sum(5, 3));
printf("%d\n", multiply(5, 3));
return 0;
}
(ps:当然这个标准库也可以放在自定义的头文件中引入,这样主函数就不需要再单独引入了)