#include "*.c"文件的妙用

今天我在看代码的时候突然看到在一个.c文件中包含了#include "*.c"代码,这个让我很诧异,然后google了一下,才发现是这么回事情,下面我写了一个测试代码,我相信你看完本篇文章就应该理解#include "*.c"文件的用法了。


测试代码如下:

main.c文件:



print.c文件如下:



这个两个代码必须放在同一目录下,但是测试时编译出错误了,大家别急,下面是我更新了的main.c文件。


main.c文件:



对比上面的两个main.c文件!


测试编译并成功打印this is test!   ,这里就可以看出差别了,我只是更换了一下#include"print.c"  的位置,结果差距就这么大,这里我解释一下#include "*.c"的作用,其实它就是一个文件其中任何部位都可以剪切出去,然后组成一个单独的.c文件,然后在原来剪切的部分添加#include "*.c"我们保存的.c文件就行了。


我相信通过以上的代码大家也应该明白#include "*.c"的用法了吧!

我们知道,通过#include "*.h"可以引用其它源文件中导出的符号,而通过使用#include "*.c"文件可以控制要将哪些源文件编译到工程中。因此,在大型的项目中,如果我们要测试不同的功能,可以为每个功能建立一个.c类型的配置文件,在该配置文件中将需要编译的功能.c文件#include进来就OK,而不用麻烦地在每次测试不同功能时都重复的把旧的功能文件删除,再添加新的功能文件。通过控制要编译的文件,可以减少最终生成代码的代码段长度,节省存储空间。许多程序设计人员没有丝毫的节省存储空间的概念,经常把与工程无关的文件包含到工程中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构中图的相关操作 C语言 #include <stdio h> #include <malloc h> #include <string h> #define MAXVEX 100 typedef char VertexType[3]; 定义VertexType为char数组类型 typedef struct vertex { int adjvex; 顶点编号 VertexType data; 顶点的信息 } VType; 顶点类型 typedef struct graph { int n e; n为实际顶点数 e为实际边数 VType vexs[MAXVEX]; 顶点集合 int edges[MAXVEX][MAXVEX]; 边的集合 } AdjMatix; 图的邻接矩阵类型 typedef struct edgenode { int adjvex; 邻接点序号 int value; 边的权值 struct edgenode next; 下一条边的顶点 } ArcNode; 每个顶点建立的单链表中结点的类型 typedef struct vexnode { VertexType data; 结点信息 ArcNode firstarc; 指向第一条边结点 } VHeadNode; 单链表的头结点类型 typedef struct { int n e; n为实际顶点数 e为实际边数 VHeadNode adjlist[MAXVEX]; 单链表头结点数组 } AdjList; 图的邻接表类型 int visited[MAXVEX]; void DispAdjList AdjList G { int i; int in[G >n] out[G >n]; for i 0;i<G >n;i++ {in[i] 0 out[i] 0; } ArcNode p; printf &quot;图的邻接表表示如下: n&quot; ; for i 0;i<G >n;i++ { printf &quot; 结点 [%d %3s] >&quot; i G >adjlist[i] data ; p G >adjlist[i] firstarc; while p NULL { out[i]++; 对于结点的出度加1 in[p >adjvex] ++; 邻接表中的结点的序号所在的结点的入度 加1 printf &quot; %d >&quot; p >adjvex ; p p >next; } printf &quot;∧ n&quot; ; } for i 0;i<G >n;i++ { printf &quot; 结点 [%d %3s]的度 :%d n&quot; i G >adjlist[i] data in[i]+out[i] ; } } void MatToList AdjMatix g AdjList &G 算法:将邻接矩阵g转换成邻接表G { int i j; ArcNode p; G AdjList malloc sizeof AdjList ; for i 0;i<g n;i++ 给邻接表中所有头结点的指针域置初值 { G >adjlist[i] firstarc NULL; strcpy G >adjlist[i] data g vexs[i] data ; } for i 0;i<g n;i++ 检查邻接矩阵中每个元素 for j g n 1;j> 0;j if g edges[i][j] 0 邻接矩阵的当前元素不为0 { p ArcNode malloc sizeof ArcNode ; 创建一个结点 p p >value g edges[i][j];p >adjvex j; p >next G >adjlist[i] firstarc; 将 p链到链表后 G >adjlist[i] firstarc p; } G >n g n;G >e g e; } void DFS AdjList g int vi 对邻接表G从顶点vi开始进行深度优先遍历 { ArcNode p; printf &quot;下标%d结点%3s >&quot; vi g >adjlist[vi] data ; 访问vi顶点 visited[vi] 1; 置已访问标识 p g >adjlist[vi] firstarc; 找vi的第一个邻接点 while p NULL 找vi的所有邻接点 { if visited[p >adjvex] 0 DFS g p >adjvex ; 从vi未访问过的邻接点出发深度优先搜索 p p >next; 找vi的下一个邻接点 } } void DFS1 AdjList G int vi 非递归深度优先遍历算法 { ArcNode p; ArcNode St[MAXVEX]; int top 1 v; printf &quot;%d > &quot; vi ; 访问vi顶点 visited[vi] 1; 置已访问标识 top++; 将初始顶点vi的firstarc指针进栈 St[top] G >adjlist[vi] firstarc; while top> 1 栈不空循环 { p St[top];top ; 出栈一个顶点为当前顶点 while p NULL 循环搜索其相邻顶点 { v p >adjvex; 取相邻顶点的编号 if visited[v] 0 若该顶点未访问过 { printf &quot;%d > &quot; v ; 访问v顶点 visited[v] 1; 置访问标识 top++; 将该顶点的第1个相邻顶点进栈 St[top] G >adjlist[v] firstarc; break; 退出当前顶点的搜索 } p p >next; 找下一个相邻顶点 } } } void BFS AdjList G int vi 对邻接表g从顶点vi开始进行广宽优先遍历 { int i v; int Qu[MAXVEX] front 0 rear 0; 循环队列 ArcNode p; printf &quot;%d > &quot; vi ; 访问初始顶点 visited[vi] 1; 置已访问标识 rear rear 1 %MAXVEX; 循环移动队尾指针 Qu[rear] vi; 初始顶点进队 while front rear 队列不为空时循环 { front front+1 % MAXVEX; v Qu[front]; 顶点v出队 p G >adjlist[v] firstarc; 找v的第一个邻接点 while p NULL 找v的所有邻接点 { if visited[p >adjvex] 0 未访问过则访问之 { visited[p >adjvex] 1; 置已访问标识 printf &quot;%d > &quot; p >adjvex ; 访问该点并使之入队列 rear rear+1 % MAXVEX; 循环移动队尾指针 Qu[rear] p >adjvex; 顶点p >adjvex进队 } p p >next; 找v的下一个邻接点 } } } int main { int i j; AdjMatix g; AdjList G; int a[5][5] {{0 1 0 1 0} {1 0 1 0 0} {0 1 0 1 1} {1 0 1 0 1} {0 0 1 1 0}}; char vname[MAXVEX] {&quot;a&quot; &quot;b&quot; &quot;c&quot; &quot;d&quot; &quot;e&quot;}; g n 5;g e 6; 连通图 int a[5][5] {{0 1 0 1 0} {1 0 1 0 0} {0 1 0 1 0} {1 0 1 0 0} {0 0 0 0 0}}; char vname[MAXVEX] {&quot;a&quot; &quot;b&quot; &quot;c&quot; &quot;d&quot; &quot;e&quot;}; g n 5;g e 4; 非连通图 int a[4][4] {{0 1 1 1} {1 0 1 1} {1 1 0 1} {1 1 1 0}}; char vname[MAXVEX] {&quot;a&quot; &quot;b&quot; &quot;c&quot; &quot;d&quot;}; g n 5;g e 12; int a[5][5] {{0 1 1 1 0} {1 0 1 1 1} {1 1 0 1 0} {1 1 1 0 1} {0 1 0 1 0}}; char vname[MAXVEX] {&quot;a&quot; &quot;b&quot; &quot;c&quot; &quot;d&quot; &quot;e&quot;}; g n 5;g e 16; 建立图的无向图 每1条无向边算为2条有向边 int a[6][6] { p151 图7 22的代价矩阵改成的邻接矩阵 {0 1 1 0 1 0} {0 0 1 0 1 0} {1 0 0 1 0 0} {0 1 0 0 1 0} {0 0 0 1 0 0} {0 0 0 1 0 0}}; char vname[MAXVEX] {&quot;v0&quot; &quot;v1&quot; &quot;v2&quot; &quot;v3&quot; &quot;v4&quot; &quot;v5&quot;}; g n 6;g e 11; for i 0;i<g n;i++ strcpy g vexs[i] data vname[i] ; for i 0;i<g n;i++ for j 0;j<g n;j++ g edges[i][j] a[i][j]; MatToList g G ; 生成邻接表 DispAdjList G ; 输出邻接表 for i 0;i<g n;i++ visited[i] 0; 顶点标识置初值 printf &quot;从顶点0的深度优先遍历序列: n&quot; ; printf &quot; 递归算法:&quot; ;DFS G 0 ;printf &quot; n&quot; ; for i 0;i<g n;i++ visited[i] 0; 顶点标识置初值 printf &quot; 非递归算法:&quot; ; DFS1 G 0 ; printf &quot; n&quot; ; printf &quot;从顶点0的广度优先遍历序列: n&quot; ; for i 0;i<g n;i++ visited[i] 0; 顶点标识置初值 printf &quot; t&quot; ;BFS G 0 ; printf &quot; n&quot; ; scanf &quot;%d&quot; ; return 0; }&quot;>数据结构中图的相关操作 C语言 #include <stdio h> #include <malloc h> #include <string h> #define MAXVEX 100 typedef char VertexType[3]; 定义VertexType为char数组类型 typedef struct vertex { int adjvex; 顶点编号 VertexType data; 顶 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值