首页 技术 正文
技术 2022年11月20日
0 收藏 761 点赞 2,902 浏览 2457 个字

C/C++:提升_头文件的使用


◇写在前面

  学到现在,很多人编写程序时只会使用一个文件。这样在代码量较小的时候,更利于表达程序,但是随着代码量的逐步增加,程序的思维逻辑不是我们一下子就可以完全理清的,因为我们的程序需要多个人共同参与,特别是编写较大工程项目时,这时我们需要使用自己编写的头文件,来减少重复劳动。由于本人天生驽钝,下面就非常简单的谈一谈头文件的使用

  在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。 .c就是你写的程序文件。


◇头文件的编写规范

  头文件主要写:

        类的声明(包括类里面的成员和方法的声明)

        函数原型

        #define常数等,但一般来说不写出具体的实现。

  在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

#ifndef CIRCLE_H
#define CIRCLE_H//你的代码写在这里#endif

  |说明

    这样做是为了防止重复编译,不这样做就有可能出错。

    至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。


◇源文件的编写规范

  源文件主要写实现头文件中已经声明的那些函数的具体代码。

  需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。


◇实例

  我起初用链表实现了一个队列,但是我把所有的实现和main方法写在一起了,可后来我又在一个程序中用到队列,看到满满的队列代码,我实在不忍心,所以我就尝试用头文件实现一个模板,以后直接调用即可。

  队列的头文件:文件名(myQueue.h)

#define OK 1
#define ERROR 0typedef int QElemtype;
typedef int status;typedef struct QNode
{
QElemtype data;
struct QNode *next;
}QNode,*QueuePtr;typedef struct{
QueuePtr head;
QueuePtr rear;
}LinkQueue;status initQueue(LinkQueue* que) ;
status destoryQueue(LinkQueue* que); //回收队列
status enQueue(LinkQueue* que,QElemtype e);
status delQueue(LinkQueue* que,QElemtype *t);
status viewQueue(LinkQueue* que);

   队列的实现文件:文件名(myQueue.c)

#include <stdio.h>
#include <stdlib.h>
#include "myQueue.h"status initQueue(LinkQueue* que) //初始化队列
{
que->head=que->rear=(QueuePtr)malloc(sizeof(QNode));
if(!que->head) //这段代码对队列里面的用户自定义数据类型进行了初始化
return ERROR;
return OK;
}
status destoryQueue(LinkQueue* que) //回收队列
{
while(que->head)
{
que->rear = que->head->next;
free(que->head);
que->head=que->rear;
}
return OK;
}
status enQueue(LinkQueue* que,QElemtype e)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
return ERROR;
p->data=e;
p->next=NULL;
que->rear->next = p;
que->rear=p;
return OK;
}status delQueue(LinkQueue* que,QElemtype *t)
{
if(que->rear==que->head)
return ERROR; //队列为空
QueuePtr p = que->head->next;
*t=p->data; que->head->next=p->next;
if(que->rear==p)
que->rear=que->head;
free(p);
return OK;
}status viewQueue(LinkQueue* que)
{
if(que->rear == que->head)
return ERROR; QueuePtr p =que->head->next;
while(p)
{
printf("val:%d",p->data);
p=p->next;
}
return OK;
}

  这样我们就不用在关心队列的实现细节,直接我们的程序中添加头文件调用即可。

  队列的调用文件:文件名(my.c)

#include <stdio.h>
#include <stdlib.h>
#include "myQueue.h"int main(int argc, char **argv)
{
LinkQueue myQueue;
initQueue(&myQueue);
for(int i=;i<=;i++)
enQueue(&myQueue,i); viewQueue(&myQueue); QElemtype a;
for(int i=;i<;i++)
{
delQueue(&myQueue,&a);
printf("%d\n",a);
}
destoryQueue(&myQueue);
return ;
}

  

    

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,078
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,553
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,402
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,177
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,814
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898