• 【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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Object-c 反射技术
    浙大MBA考研经验分享:名校梦不可负~
    五、Spring Boot 整合持久层技术(2)
    Java学习笔记5.3.2 Set接口 - TreeSet类
    echarts饼图label显示不全原因?
    MD5算法
    Day22:多态详解
    ESP32S3在VScode中使用USB口调试
    ThingsBoard移动端应用的使用
    第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
  • 原文地址:https://blog.csdn.net/distant_Rove666/article/details/127564767