用定义头文件实现接口

在写一个 .c 文件的时候,如果代码的数量很大就会使后续的调试和添加功能增加难度。

如果没有很清晰的思路,在很大的篇幅的代码中进行操作是一件很让人头疼的事情。

所以我们可以将代码分成很多个 C 文件 这样让代码的结构更清晰。

同时在一个写好的函数以后可以直接拿来使用,这样减少了代码的重复书写,减少重复无意义的工作。

这样你就可以在你的这个函数本身上,进行不断的修改调试让这个功能实现的更完善。

为了实现这个就用到了接口,在这里用头文件实现参数和函数的接口。

下面举一个例子:

 1 #ifndef _Add_
 2 #define _Add_
 3 struct Student
 4 {
 5     int number;
 6     char name[10];
 7     struct Student *next;
 8 };
 9 extern void _Add_print(struct Student *head);
10 extern struct Student *  _Add_add(struct Student *head);
11 #endif

所以这个头文件的基本书写基本的方式是:

1 #ifndef _Add_  //这个名可以根据自己的要求进行更改,C语言头文件中的宏定义都要加前后下划线所以我这里也这样做了 
2 #define _Add_  //这段的意思是如果没有宏定义  _Add_ 就定义 _Add_
3 /*这里写上你希望使用的变量和函数但是只是暴露形式(函数类型和它的参数)并不对函数进行实现因为这不是接口应该实现的工作*/
4 #endif //结束宏定义

那么其实一个头文件的定义,如果你只有少量的代码的时候,不添加如上的一段代码,也是可以正常编译使用的并且不会出现任何问题,但是如果出现了代码文件很多的情况,就可能出像头文件重复调用的情况,我想你当然不会写出如下的代码。

#include<stdio.h>
#include"Status.h"
#include"Status.h"

但是你不能保证一个头文件不被多个文件需求,这个时候可能就出像嵌套的使用同一个头文件,这个时候宏定义就起到了作用,当一个头文件还生效的时候,如果你再次使用头文件那么,头文件中的函数就不会重复定义,这样就不会莫名出现奇怪的问题,你就可以放心使用头文件,而不担心报错。

其实导致这个问题的出现也是因为C语言过于的自由,像更多的高级语言是直接禁止头文件循环调用的。

所以在C语言中为了解决这个问题,在编写头文件的时候一定要加上特定的宏定义,这这会让你剩很多事。

那么对于这个几个文件将要如何进行编译那?

如果使用的是dev-C++就不能进行单个文件的编译,这样编译一定是会出错的,因为你编译的并不是一个工程,每个文件之间没有关联,那么要不你创建工程,在工程中进行编译,要么就使用命令进行编译。

如果你在windows环境下没有GCC编译器(我想那也不能)就用这个命令,"cl" 首先要保证所有的文件都在同一个文件夹下,然后打开cmd命令 打开代码所在的文件夹,

只对所有的C文件进行操作就可以 不要对h文件进行操作,会出现链接错误,

先将所有的c文件生成obj文件 目标文件。然后对目标文件进行链接就可以生成你最后想要的exe文件。

当然最好编译还是使用GCC的,如果你用过我想你一定会爱上它的。

gcc直接加上代码文件进行编译,可带参数:

1 gcc code.c -o hello  //默认的情况下会生成一个叫a.out的可执行文件 -o 可以生成 -o 后名称的可执行变量
2 gcc code.c -g //加入 -g 参数是可以进行gdb调试的参数
3 gcc code.c -S //对代码进行编译生成一个 .s 的汇编文件
4 gcc code.c -c //生成 .o 的目标文件是不可以直接打开的二进制代码
原文地址:https://www.cnblogs.com/foreverW/p/6777697.html