GCC 编译多个文件
今天写数据结构的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 编译多个文件的更多相关文章
- gcc编译时头文件和库文件搜索路径
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始( ...
- linux gcc 编译时头文件和库文件搜索路径
一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...
- 使用当前平台的 gcc 编译内核头文件
[arm@localhost tchain3.4.4]#cd ${KERNEL} [arm@localhost kernel]#tar xvfz linux2.6.14.1.tar.gz [arm@ ...
- Linux c codeblock的使用(二):在工程中编译多个文件
(一)前言 我们刚开始学习linux c的时候,一般都是在一个c文件里面写完所有程序,然后用gcc编译这个c文件就好了,十分简单. 但是你有没有想过,如果我们希望将不同模块的代码放到不同的c文件,然后 ...
- GCC编译过程与动态链接库和静态链接库
1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...
- gcc 编译 + 选项【转】
转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...
- Linux下多个.c文件的编译和Makefile文件
在编程的时候,我们可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接.这样有利于程序功能模块化,也方便检查代码错误. .h文件:里面编辑该程序需要引用的头文件. #ifndef ...
- gcc编译问题
gcc avl.o hash.o list.o rb.o example.o -o 123.exe 多个.o输出 exe -c和-o都是gcc编译器的可选参数.-c表示只编译(compile)源文件但 ...
- gcc 编译 c++ 程序(转载)
单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream& ...
随机推荐
- Voovan 是一个高性能异步网络框架和 HTTP(Java)
Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操 ...
- 统计插件,Highcharts,以及modelformset
一.modelfromset组件 1.作用:用于批量处理多个表单 form表单对应的组件是formset Modelform对应的组件是modelformset 2.引入 From django.fo ...
- Spark之SparkSql
-- Spark SQL 以编程方式指定模式 val sqlContext = new org.apache.spark.sql.SQLContext(sc) val employee = sc.te ...
- Linux上vim的使用
.........以下是我在使用vim时的操作经验........... (首先要了解vim主要是命令模式,输入模式,可视化模式,主要区别就是在不同模式下可以完成不同的操作,只是个编辑器,没有必要太纠 ...
- 自定义vue全局组件use使用、vuex的使用
自定义vue全局组件use使用(解释vue.use()的原理)我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们 ...
- 中转Webshell 绕过安全狗(二)
前言 在实践中转webshell绕过安全狗(一)中,在服务端和客户端均为php.某大佬提示并分享资源后,打算使用python完成中转.部分代码无耻copy. 客户端 本地127.0.0.1,安装pyt ...
- Hadoop初步学习
我们老板理解的大数据是,从数据到知识的转化.大数据目前的应用如 支付宝金融大数据.腾讯出行大数据等. 大数据的工作就是从海量数据源中筛选,梳理对自己有用的数据,整合成合适的数据结构,存储并进行可视化. ...
- Postman接口测试_基本功能
一. 安装与更新 1.安装的方式 方式1:chrome插件版本:chrome--->设置--->扩展程序: 方式2:native版本(具有更好的扩展性,推荐使用):https://ww ...
- Java多线程(五):死锁
死锁 概念 当线程Thread-0持有锁Lock1,Thread-1持有锁Lock2,此时Thread-0申请Lock2锁的使用权,Thread-1申请Lock1锁的使用权,Thread-0和Thre ...
- IPv6 优于 IPv4 的十大功能
现在是 9102 年,有一个严重的问题,困扰着资深宅男二狗子.那就是偶像团体没新名了.今年开始,偶像团体 XKB48 已经在无法取更多的新名字了,排列组合的所有方式都已经经过了历史长河的洗礼,除非偶像 ...