C语言常用的代码组织形式--多文件
对于小型代码而言,可以将所有的文件写到一个源文件中。但是对于一个大的项目工程,代码量极大,如果把所有的源码都放在一个源文件,就会显得代码杂乱,不利于阅读,更不便于代码的修改和维护。这时候我们需要合理的组织代码,可以使用多个文件,把源码归类放到不同的文件中。
程序多文件一般分为两类:
1、头文件(.h):像我们常用的stdio.h,stdlib.h....这些都是C为我们提供的
2、源文件(.c):一般一个头文件,对应一个.c文件。
先说下自定义的头文件:
头文件中一般包括
(1)头文件区:包含源码所需的头文件,例如stdio.h,stdlib.h等。
(2)全局宏区:定义模块公用的宏(#define),例如缓冲区的大小。
(3)全局变量区:所有模块共用的变量(非static)。
(4)函数接口区:包含所有相关模块的函数接口。
源文件:
多文件的编译方法:
gcc -o 生成的可执行文件 源文件1 源文件2...
如果要编译的文件较多可以使用通配符*
gcc -o 生成的可执行文件 *.c
给大家推荐一个Windows版的gcc,TDM-gcc,它的使用和linux系统上的gcc完全一样,使用的命令行模式
,非常好用,下载地址:
http://tdm-gcc.tdragon.net/download
对于本例,编译命令为:
gcc link.c main.c -o main
运行main
./main
输出结果为:
1
2
3
4
5
6
7
destory......
需要注意的是C++与C语言的多文件并不相同,c++头文件中一般放的是类的定义,格式如下
程序多文件一般分为两类:
1、头文件(.h):像我们常用的stdio.h,stdlib.h....这些都是C为我们提供的
2、源文件(.c):一般一个头文件,对应一个.c文件。
先说下自定义的头文件:
头文件中一般包括
(1)头文件区:包含源码所需的头文件,例如stdio.h,stdlib.h等。
(2)全局宏区:定义模块公用的宏(#define),例如缓冲区的大小。
(3)全局变量区:所有模块共用的变量(非static)。
(4)函数接口区:包含所有相关模块的函数接口。
源文件:
源文件就是头文件对应的那个.c文件,它一般包括函数的具体实现。
下面以一个操作链表的程序为例,具体说明多文件的用法及编译方法首先定义一个头文件link.h
//start link.h #include <stdio.h> #include <stdlib.h>//所有模块所需的头文件 struct node //节点结构体 { int data; struct node *next; }; typedef struct node * Node; //为了简化代码,我们将节点指针变量用Node代替 extern Node head; //链表头,extern的作用是引用外部文件中的Node head //链表的操作函数(接口) extern int insert(int d); extern int del(int d,Node *res); extern void print(); extern void destory(); //end link.hlink.c 文件定义所有的操作链表的函数
//start link.c #include "link.h" //包含自定义的link.h Node head; //链表的头结点 int insert(int d) { Node p=NULL,q=NULL; p = head; if(p!=NULL) { while(p->next!=NULL) { p = p->next; }//查找尾结点 } q = (Node)malloc(sizeof(struct node)); if(q==NULL) return -1; q->next=NULL; q->data = d; if(p==NULL) //如果是空链表 { head = q; return 1; } p->next = q; return 1; //插入成功返回1 } int del(int d,Node *res) { Node p=NULL,q=NULL; p = head; if(p==NULL) //如果是空表返回-1 return -1; if(p->data==d) { *res = p; head = p->next; return 1; } else if(p->next==NULL) return -1; q = p; p = p->next; while(p!=NULL) { if(p->data!=d) { q = p; p = p->next; }else { q->next = p->next; p->next = NULL; *res = p; return 1; } } return -1; } void print() { Node p = head; while(p!=NULL) { printf("%d ",p->data); p = p->next; } } void destory() { Node p=NULL; while(head!=NULL) { p = head->next; free(head); head = p; } head = NULL; } //end link.cmain.c 里面包含了整个程序的main函数,程序执行的入口
//start main.c #include "link.h" int main(void) { Node p; int i; for(i=1;i<8;i++) insert(i); print(); printf("destory...... "); destory(); return 0; }以上就是全部文件
多文件的编译方法:
gcc -o 生成的可执行文件 源文件1 源文件2...
如果要编译的文件较多可以使用通配符*
gcc -o 生成的可执行文件 *.c
给大家推荐一个Windows版的gcc,TDM-gcc,它的使用和linux系统上的gcc完全一样,使用的命令行模式
,非常好用,下载地址:
http://tdm-gcc.tdragon.net/download
对于本例,编译命令为:
gcc link.c main.c -o main
运行main
./main
输出结果为:
1
2
3
4
5
6
7
destory......
需要注意的是C++与C语言的多文件并不相同,c++头文件中一般放的是类的定义,格式如下
#ifndef _***_H_ #define _***_H_ //类的定义 #endifC++ .cpp 文件中一般放的是类的实现
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Linux下安装Nginx完整教程及常见错误解决方案
- 下一篇: 用C语言一次性读取多个文件,大量文件