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.h
link.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\n",p->data);
		p = p->next;
	}
}
void destory()
{
	Node p=NULL;
	while(head!=NULL)
	{
		p = head->next;
		free(head);
		head = p;
	}
	head = NULL;
}
//end link.c
main.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......\n");
	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_

//类的定义

#endif
C++ .cpp 文件中一般放的是类的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值