亲宝软件园·资讯

展开

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

编程远泊 人气:0

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 <stdio.h>
#include <string.h>
#include <stdlib.h>
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;
}

加载全部内容

相关教程
猜你喜欢
用户评论