C/C++中如何写头文件

  在C语言的学习过程中,我们一般把所有的代码写在一个文件中。随着自身水平的提高,我们发现代码越写越长,代码行数越来越多,把一个工程的所有代码写在一个文件中让人看起开非常吃力。于是我们开始想把代码中的函数归类,同一类放在同一个文件中当中,那么如何实现将一个工程中的代码放到不同文件中呢?这就需要写头文件了。下面的简单列子将让你学会如何写头文件。你也可以点击这里下载源代码自己研究。

  假设我们需要定义一些与栈有关的函数,主程序需要调用这些函数。

  首先,我们在同一文件夹中新建3个文件(要包含不同的自定义头文件需要加上路径,为了使用方便就在同一个文件夹下定义),名称分别为:

  main.cpp  包含主程序

  stack.cpp  定义与栈有关的函数

  stack.h   对stack.cpp里面的函数、结构体变量等进行声明

  

  

  然后在stack.h中添加如下代码:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include "stdio.h"
#include "stack.cpp" ///表名函数原型在,stack.cpp中,VC6.0好像不用加这句 #endif // HEADER_H_INCLUDED

  

  在stack.cpp中包含stack.h:

#include "stack.h"

  同样在main.cpp中也包含stack.h,并添加主函数:

#include "stack.h"

int main()
{
    return 0;
}

  这几步做完之后,基本框架也就完成了,下面我们开始写我们的库函数,例如我们要定义:

  void stack_push(pSTACK &S);

  pSTACK stack_pop(pSTACK &S);

  bool stack_empty(pSTACK &S);

3个函数,以及一个结构体,那么这函数的原型和结构体应该写在stack.cpp中,函数声明和结构体声明写在stack.h中。

stack.cpp:

#include "stack.h"

typedef struct Stack
{
    struct Stack *next;
    unsigned int stack_size;
};

void stack_push(pSTACK &S)
{

    /**此处省略若干代码**/

    printf("这个函数来自stack.cpp\t");

    printf("进栈\n");
}

pSTACK stack_pop(pSTACK &S)
{
    pSTACK s=NULL;

    /**此处省略若干代码**/

    printf("这个函数来自stack.cpp\t");
    printf("出栈\n");
    return s;
}

bool stack_empty(pSTACK &S)
{

    /**此处省略若干代码**/

    return true;
}

stack.h:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

#include "stdio.h"

/***结构体声明***/
typedef struct Stack STACK,*pSTACK;

/***函数声明***/
void stack_push(pSTACK &S);
pSTACK stack_pop(pSTACK &S);
bool stack_empty(pSTACK &S);

#include "stack.cpp"            ///表名函数原型在,stack.cpp中,VC6.0好像不用加这句

#endif // HEADER_H_INCLUDED

  在main函数中调用自定义函数。

main.cpp:

#include "stack.h"

int main()
{
    pSTACK S=NULL;
    stack_push(S);
    stack_pop(S);
    return 0;
}

输出:

  这样一个简单的多文件框架就实现了,点击这里下载源代码。

时间: 2024-09-30 01:52:18

C/C++中如何写头文件的相关文章

C++中#include包含头文件带 .h 和不带 .h 的区别

C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同? 之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用 using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C+ +标准化过程为C++开发者做了哪些有意义的工作. (

C语言怎么写头文件?

C语言中.h和.c文件解析(很精彩)   简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件)

vscode中c/c++头文件引用找不到飘红

正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#include errors detected) 花了我几十分钟, 可以说相当智障了... 在 c_cpp_properties.json(就是c/c++的配置文件)里面添加 "includePath": 开始提示 glib.h 找不到, 我加上了 "/usr/include/glib

前端技术:HTML---Head标签中包含的头文件标签,body标签包含的内部标签

1.Head标签中包含的 头文件标签的作用: (1)title标签:定义网页的标题. (2)meta标签:一般用于定义页面的特殊信息,例如页面的关键字.页面描述等 (3)link标签:用于引入外部样式文件(CSS 文件). (4)style标签:用于定义元素的CSS样式. (5)script标签:用于定义页面的JavaScript代码,或者引入外部JavaScript文件. meta标签包含的属性 (1)charset属性:字符集编码方式: ASCII:数字.英文字母.字符进行编码 GB2312

Makefile中自动生成头文件依赖

为什么需要自动生成头文件依赖? 编译单个源文件时,需要获取文件中包含的头文件的信息,但是一般的Makefile不会在规则中明确写明文件依赖的头文件,所以单独修改头文件后,不会导致包含头文件的源文件重新编译.如果每次手动的添加头文件依赖,又会非常的繁琐,所以需要一种自动生成依赖的方法. 编译器中神奇的选项 使用$(CC)中的-M命令就可以完美的解决问题,因为-M选项可以将源文件依赖的所有头文件,自动解析出来. 例子:在当前路径下,编辑test.c和test.h文件,test.c如下所示,test.

通过词法分析实现的指出C程序中包含的头文件

在阅读有些程序的源码时,很希望能够马上弄清楚源码中到底包含了哪些头文件,以确定是否需要为了特殊的函数而手动加入#include.借助flex的词法分析实现了这一功能,本质上就是对正则表达式的匹配.注意这个程序不能够处理包含嵌套的情形(也就是说不能指出包含文件包含了哪些文件),感兴趣的可以通过栈来实现.源码如下: 1 /*源代码:ic.l*/ 2 3 /*定义文件预处理指令文件名起始状态*/ 4 %x IFILE 5 6 %% 7 ^"#"[ \t]*include[ \t]*[\&qu

C++中 &lt;iso646.h&gt;头文件

1 #include<iostream> 2 #include<iso646.h> 3 using namespace std; 4 int main(){ 5 int i = 5,j = 6,k=7; 6 if(i<j and j<k)cout<<"i<j and j<k"<<endl; 7 if(i<j or j<k)cout<<"i<j or j<k"&

C++中的算法头文件&lt;algorithm&gt;,&lt;numeric&gt;和&lt;functional&gt;

算法部分主要由头文件<algorithm>,<numeric>和<functional>组成.<algorithm>是所有STL头文件中最大的一个,它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较.交换.查找.遍历操作.复制.修改.移除.反转.排序.合并等等.相关函数:http://www.cplusplus.com/reference/algorithm/<numeric>体积很小,只包括几个在

iOS开发中遇到的头文件找不到的问题解决办法

有时会遇到莫名其妙的明明有这个文件,但是就是显示头文件找不到~下面讲下我的解决办法~ 先找到这里Search Paths 喏~~这一行,双击他!! 弹出来个框框~修改成这个样子,回车!搞定了!再运行试试~头文件找的到了吧O(∩_∩)O~