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& ...
随机推荐
- RocketMQ(1)-架构原理
RocketMQ(1)-架构原理 RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现:集群和HA实现相对简单:在发生宕机和其它故障时消息丢失率更低. ...
- 高性能嵌入式核心板新标杆!米尔推出基于NXP i.MX8M处理器的MYC-JX8MX核心板
随着嵌入式及物联网技术的飞速发展,高性能计算的嵌入式板卡已经成为智能产品的基础硬件平台.为响应行业应用和满足客户需求,米尔电子推出基于NXP公司i.MX8M系列芯片的开发平台MYD-JX8MX系列开发 ...
- 最全java多线程总结2--如何进行线程同步
上篇对线程的一些基础知识做了总结,本篇来对多线程编程中最重要,也是最麻烦的一个部分--同步,来做个总结. 创建线程并不难,难的是如何让多个线程能够良好的协作运行,大部分需要多线程处理的事情都不 ...
- Spark学习之路(三)—— 弹性式数据集RDDs
弹性式数据集RDDs 一.RDD简介 RDD全称为Resilient Distributed Datasets,是Spark最基本的数据抽象,它是只读的.分区记录的集合,支持并行操作,可以由外部数据集 ...
- mariadb10.1.17安装
一.源码编译安装gcc-5.1.0 1.下载gcc源码包 Download (HTTP): http://ftpmirror.gnu.org/gcc/gcc-5.2.0/gcc-5.2.0.tar.b ...
- chromedriver配置
需要先安装chrome浏览器,添加chrome源 sudo vim /etc/yum.repos.d/google-chrome.repo 添加以下内容 [google-chrome] name=go ...
- KVM虚拟机迁移至VMware
1.将kvm下虚拟机关机: [root@localhost ~]# virsh list --all Id Name State ----------------------------------- ...
- django的命令, 配置,以及django使用mysql的流程
1.Django的命令: 下载 pip install django==1.11.16 pip install django==1.11.16 -i 源 创建项目 django-admin start ...
- LNMP WEB架构构建
LNMP WEB架构处理请求过程 1.Nginx为一款高性能Web服务器,本身是不能处理PHP的,当接收到客户端浏览器发送HTTP Request请求时,Nginx服务器响应并处理web请求,静态资源 ...
- Akka-CQRS(16)- gRPC用JWT进行权限管理
前面谈过gRPC的SSL/TLS安全机制,发现设置过程比较复杂:比如证书签名:需要服务端.客户端两头都设置等.想想实际上用JWT会更加便捷,而且更安全和功能强大,因为除JWT的加密签名之外还可以把私密 ...