zoukankan      html  css  js  c++  java
  • 用定义头文件实现接口

    在写一个 .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 的目标文件是不可以直接打开的二进制代码
  • 相关阅读:
    10.1~10.15学习情况
    ACM-ICPC 2018 沈阳赛区网络预赛
    打卡4
    打卡3
    tab 简单的tab
    css 圆形动画
    pdf和图片之间的转换
    对list进行分组
    C# 打开所在文件夹
    读取xml文件
  • 原文地址:https://www.cnblogs.com/foreverW/p/6777697.html
Copyright © 2011-2022 走看看