C语言多文件编程问题解析

1 为什么要使用多文件编程

在大型的综合项目中,是由很多具有不同的功能的代码构成,不可能将所有的代码都写到一个文件中,

而是采用多文件的方式对代码进行管理,将具有不同功能的代码写到不同的文件中。 比如:led灯的驱动代码写到led.c文件,beep驱动的代码写到beep.c中,key驱动代码写到key.c中…

2 多文件编程的使用方法

源文件:指.c文件,主要存放的是头文件的包含,变量定义,函数的定义

头文件:指.h文件,主要存放的是宏定义,函数的声明,已经其他头文件的包含

防止头文件的重复包含的机制:

#ifndef 头文件名大写_H

#define 头文件名大写_H

头文件中书写的宏定义及函数的声明;

#endif

当头文件第一次被包含时,判断"头文件名大写_H"宏定义是否被定义,

如果没有定义,则头文件中的代码会被展开,并且定义"头文件名大写_H"宏定义。

当头文件第二次被包含时,判断"头文件名大写_H"宏定义是否被定义,

由于"头文件名大写_H"宏已经被定义,则头文件中的代码将不会被展开。

在书写自己的头文件时,首先手写头文件的重复包含的机制。

重复包含机制中的宏定义的名字可以书写其他的名字,但是"头文件名大写_H"已经成为一种约定俗称的用法。

3 多文件编程的练习

将C基础中的冒泡排序的代码使用多文件编程的方式实现:

冒泡排序的代码封装成函数,写到bubbling.c文件中, 函数的声明写到bubbling.h文件中, 在main.c文件中调用冒泡排序的函数。

bubbling.h文件:

#ifndef __BUBBLING_H__
#define __BUBBLING_H__
#include 
#include 
#include 
void bubbling(int *s,int len);
void print(int *s);
#endif

bubbling.c文件:

#include "bubbling.h"
void bubbling(int *s,int len)
{
    for(int j = 0; j < len-1; j++){
		//内层循环控制一趟排序
		for(int i = 0; i < len-1-j; i++){
					//此处的 -1 是防止越界访问的
					//此处的 -j 是因为每趟都可以少比较一个元素
			if(s[i] > s[i+1]){//如果是降序 只需要将此处的 > 改成 < 即可
				//交换
				int temp = s[i];
				s[i] = s[i+1];
				s[i+1] = temp;
			}
		}
	}
    return 0;
}

print.c文件

#include "bubbling.h"
void print(int *s){
    //排序前
	int i = 0;
	int j = 0;
	for(i = 0 ; i < 10; i++){
		printf("%d  ", s[i]);
	}
	printf("\n");
}

main.c文件

#include "bubbling.h"
int main(int argc, const char *argv[])
{
    /*your code*/
    int s[10] = {11, 22, 43, 567, 1, 4, 9, 8, 55, 98};
	int len = sizeof(s)/sizeof(s[0]);//数组的长度:元素的个数
	int temp = 0;
    print(s);
    bubbling(s,10);
    print(s);
    return 0;
}

到此这篇关于C语言多文件编程问题解析的文章就介绍到这了,更多相关C语言多文件编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(C语言多文件编程问题解析)