今天写数据结构的example,定义了3个文件:lish.h list.c main.c

list.h是list.c的头文件,mian.c中对list.h进行了引用。代码如下:

list.h

  1 #ifndef _List_H
2 #define _List_H
3 typedef int ElementType;
4
5 struct Node;
6 typedef struct Node *PtrToNode;
7 typedef PtrToNode List;
8 typedef PtrToNode Position;
9
10 List MakeEmpty();
11 int IsEmpty( List L );
12 int IsLast( Position P, List L );
13 Position Find( ElementType X,List L );
14 void Delete( ElementType X,List L);
15 Position FindPrevious( ElementType X, List L );
16 void Insert( ElementType X, List L, Position P );
17 void DeleteList( List L );
18 //Position Header( List L);
19 //Position First( List L );
20 //Position Advice( Position P);
21 //ElementType Retrieve( Position P);
22
23 #endif /*_List_H*/
24
25
26 /*Place in the Implementation file */
27 struct Node
28 {
29 ElementType Element;
30 Position Next;
31 };

list.c

    #include "list.h"
2 #include <stdlib.h>
3 /*make a empty list,Head pointer to it's head*/
4 List MakeEmpty()
5 {
6 PtrToNode L;
7 L=(struct Node*)malloc(sizeof(struct Node));
8 L->Next = NULL;
9 return L;
10 }
11 /*Return true if L is empty*/
12 int IsEmpty( List L )
13 {
14 return L->Next==NULL;
15 }
16 /*Return true if P is the last position in list L*/
17 int IsLast( Position P, List L )
18 {
19 return P->Next==NULL;
20 }
21 /*Return Position of X in L;NULL if not found*/
22 Position Find( ElementType X,List L )
23 {
24 Position P;
25 P=L->Next;
26 while(P!=NULL&&P->Element!=X)
27 P=P->Next;
28 return P;
29 }
30 /*Delete first occurrence of X from a list*/
31 /*Assume use of a header node*/
32 void Delete( ElementType X, List L )
33 {
34 Position P, TmpCell;
35
36 P = FindPrevious( X, L );
37
38 if( !IsLast( P, L ))
39 {
40 TmpCell = P->Next;
41 P->Next = TmpCell->Next;
42 free( TmpCell );
}
44 }
45 /* If X is not found, then Next field of returned */
46 /* Position id NULL*/
47 /*Assumes a header */
48 Position FindPrevious( ElementType X, List L )
49 {
50 Position P;
51
52 P=L;
53 while( P->Next != NULL && P->Next->Element != X )
54 P = P->Next;
55 return P;
56 }
57 /* Insert (after legal position P) */
58 /* Header implementtation assumed */
59 /* Parameter L is unused in this implementation */
60 void Insert( ElementType X, List L, Position P )
61 {
62 Position TmpCell;
63
64 TmpCell = malloc( sizeof ( struct Node ) );
65 if( TmpCell == NULL)
66 {
67 //printf( "Out of space!!!" );
68 }
69 TmpCell->Element = X;
70 TmpCell->Next = P->Next;
71 P->Next = TmpCell;
72 }
73 /* Correct DeleteList algorithm*/
74 void DeleteList( List L )
75 {
76 Position P, Tmp;
77
78 P = L->Next;
79 L->Next = NULL;
80 while( P != NULL)
81 {
82 Tmp = P->Next;
83 free(P);
84 P=Tmp;
85 }
86 }

main.c

 1 #include <stdio.h>
2 #include "list.h"
3
4 void main()
5 {
6 List L;
7 L=MakeEmpty();
8 //Insert( 10, L, L);
9 Position P;
10 if( !IsEmpty( L ) )
11 {
12 P = L->Next;
13 while( P != NULL )
14 {
15 printf( "%d\n",P->Element);
16 P=P->Next;
17 }
18 printf("Not Empty!\n");
19 }
20 else
21 {
22 printf("Empty!");
23 }
24 }
25

最后,即是利用gcc来编译这几个文件:

gcc -c list.c

gcc -c main.c

gcc main.o list.o -o main

编译后的目标文件即为:main

然后执行:./main 即可
注:被引用的list.h list.c文件要和main.c文件在同一文件夹下,否则要指定路径。

GCC 编译多个文件的更多相关文章

  1. gcc编译时头文件和库文件搜索路径

    特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始( ...

  2. linux gcc 编译时头文件和库文件搜索路径

    一.头文件    gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始    ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...

  3. 使用当前平台的 gcc 编译内核头文件

    [arm@localhost tchain3.4.4]#cd ${KERNEL} [arm@localhost kernel]#tar xvfz linux­2.6.14.1.tar.gz [arm@ ...

  4. Linux c codeblock的使用(二):在工程中编译多个文件

    (一)前言 我们刚开始学习linux c的时候,一般都是在一个c文件里面写完所有程序,然后用gcc编译这个c文件就好了,十分简单. 但是你有没有想过,如果我们希望将不同模块的代码放到不同的c文件,然后 ...

  5. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  6. gcc 编译 + 选项【转】

    转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...

  7. Linux下多个.c文件的编译和Makefile文件

    在编程的时候,我们可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接.这样有利于程序功能模块化,也方便检查代码错误. .h文件:里面编辑该程序需要引用的头文件. #ifndef  ...

  8. gcc编译问题

    gcc avl.o hash.o list.o rb.o example.o -o 123.exe 多个.o输出 exe -c和-o都是gcc编译器的可选参数.-c表示只编译(compile)源文件但 ...

  9. gcc 编译 c++ 程序(转载)

    单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream& ...

随机推荐

  1. ab fails to connect to localhost

    The following command fails: $ ab -n 1 localhost:8000/ ... Benchmarking localhost (be patient)...apr ...

  2. uni-app中Vuex的引用

    //store 中 store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vue ...

  3. es6基本语法,vue基本语法

    一.es6基本语法 0.es6参考网站 http://es6.ruanyifeng.com/#README 1.let 和 const (1)const特点: 只在局部作用域起作用 不存在变量提升 不 ...

  4. SYN5006型电机同步编码脉冲分配器

    SYN5006型电机同步编码脉冲分配器 编码器信号分配板增量式编码器脉冲分配器使用说明视频链接: http://www.syn029.com/h-pd-81-0_310_13_-1.html 请将此链 ...

  5. Anaconada安装

    目录 Anaconda介绍 Anaconda下载 安装Anaconda 配置环境变量 管理虚拟环境 activate 切换环境 卸载环境 关于环境总结 安装第三方包 卸载第三方包 查看环境包信息 导入 ...

  6. 全网唯一的纯前端实现的canvas支持多图压缩并打包下载的工具

    技术栈: canvas jszip.js(网页端压缩解压缩插件JSZIP库) FileSaver.js(文件保存到本地库) 直接解读源码: <div class="cont" ...

  7. ZooKeeper学习之路(四)—— Java 客户端 Apache Curator

    一.基本依赖 Curator是Netflix公司开源的一个Zookeeper客户端,目前由Apache进行维护.与Zookeeper原生客户端相比,Curator的抽象层次更高,功能也更加丰富,是目前 ...

  8. Java类库的源码

    Java类库中的类,包括System.String.Scanner.Math.Random等:这些类也是用Java编写的. Java类库中包含数千个文件,其中的很多文件都包含数千行代码:因为Java类 ...

  9. 分享SQL,查询用户最近一次购买时间间隔

    (1)先创建一张测试表: CREATE TABLE `用户购买订单` ( `购买时间` datetime(6) NULL DEFAULT NULL, `用户` varchar(20) CHARACTE ...

  10. EditPlus VC2010 and 2008 C/C++配置

    源自:http://blog.csdn.net/weiling_shen/archive/2010/03/26/5421017.aspx 对于2010跟2008差不多,只需相应的修改一下路径即可:如2 ...