日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言多文件編程問題解析_C 語言

作者:編程遠泊 ? 更新時間: 2023-02-02 編程語言

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;
}

原文鏈接:https://distant-rove.blog.csdn.net/article/details/127564767

欄目分類
最近更新