C語言多文件編程問題解析
1 為什么要使用多文件編程
在大型的綜合項目中,是由很多具有不同的功能的代碼構(gòu)成,不可能將所有的代碼都寫到一個文件中,
而是采用多文件的方式對代碼進行管理,將具有不同功能的代碼寫到不同的文件中。 比如:led燈的驅(qū)動代碼寫到led.c文件,beep驅(qū)動的代碼寫到beep.c中,key驅(qū)動代碼寫到key.c中…
2 多文件編程的使用方法
源文件:指.c文件,主要存放的是頭文件的包含,變量定義,函數(shù)的定義
頭文件:指.h文件,主要存放的是宏定義,函數(shù)的聲明,已經(jīng)其他頭文件的包含
防止頭文件的重復(fù)包含的機制:
#ifndef 頭文件名大寫_H
#define 頭文件名大寫_H
頭文件中書寫的宏定義及函數(shù)的聲明;
#endif
當(dāng)頭文件第一次被包含時,判斷"頭文件名大寫_H"宏定義是否被定義,
如果沒有定義,則頭文件中的代碼會被展開,并且定義"頭文件名大寫_H"宏定義。
當(dāng)頭文件第二次被包含時,判斷"頭文件名大寫_H"宏定義是否被定義,
由于"頭文件名大寫_H"宏已經(jīng)被定義,則頭文件中的代碼將不會被展開。
在書寫自己的頭文件時,首先手寫頭文件的重復(fù)包含的機制。
重復(fù)包含機制中的宏定義的名字可以書寫其他的名字,但是"頭文件名大寫_H"已經(jīng)成為一種約定俗稱的用法。
3 多文件編程的練習(xí)
將C基礎(chǔ)中的冒泡排序的代碼使用多文件編程的方式實現(xiàn):
冒泡排序的代碼封裝成函數(shù),寫到bubbling.c文件中, 函數(shù)的聲明寫到bubbling.h文件中, 在main.c文件中調(diào)用冒泡排序的函數(shù)。
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++){ //內(nèi)層循環(huán)控制一趟排序 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]);//數(shù)組的長度:元素的個數(shù) int temp = 0; print(s); bubbling(s,10); print(s); return 0; }
到此這篇關(guān)于C語言多文件編程問題解析的文章就介紹到這了,更多相關(guān)C語言多文件編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語言中單鏈表的基本概念與讀取數(shù)據(jù)元素,需要的可以參考一下2021-12-12C++字符數(shù)組的輸入輸出和字符串結(jié)束標(biāo)志使用講解
這篇文章主要介紹了C++字符數(shù)組的輸入輸出和符串結(jié)束標(biāo)志使用講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09boost.asio框架系列之調(diào)度器io_service
這篇文章介紹了boost.asio框架系列之調(diào)度器io_service,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06