網站首頁 編程語言 正文
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
相關推薦
- 2022-05-25 String.isEmpty() 方法使用報空指針異常?那怎么才能更好的判斷String返回值為空的
- 2023-08-15 antdv Input組件maxLength屬性設置默認值
- 2022-06-30 PyTorch實現卷積神經網絡的搭建詳解_python
- 2022-05-23 腳本實現SSL證書到期監控示例_PowerShell
- 2022-07-07 Django加載配置的過程詳解_python
- 2021-12-01 Android?NDK開發(C語言--聯合體與枚舉)_Android
- 2022-10-14 SpringCloud 微服務與遠程調用測試
- 2022-04-10 git本地提交到遠程倉庫報錯error: failed to push some refs to
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支