c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了
近期寫了一些比較大的單片機(jī)程序,找了很多參考資料,看了大量別人的程序。我從中發(fā)現(xiàn)了自己對于C語言編程還只是知道如何實(shí)現(xiàn)功能,但對編程規(guī)范掌握的不好,編程習(xí)慣也沒有很好的養(yǎng)成。
學(xué)了這么久的單片機(jī),還真是挺難為情的
由此我將一些經(jīng)驗(yàn)分享出來,供大家參考及修正。
說一說起因,為什么標(biāo)題叫“幾人不知頭文件“。
當(dāng)我在寫一些代碼量較大的程序時,因?yàn)闆]有合理的規(guī)劃代碼結(jié)構(gòu),導(dǎo)致代碼順序很混亂,當(dāng)要查找一些功能函數(shù)時,只能打開Functions窗口。但我常常忘了有這么個工具,就使勁在一篇長長的代碼中去翻閱。這讓我很是頭疼。
一陣頭疼
為啥會這樣呢?
還不是因?yàn)閷W(xué)的不好,用四川話來說就是“二十九天的徒弟”。
超級難受
只掌握了個皮毛。雖然有時候看著自己的代碼很厲害,但仔細(xì)一看,爛的過分,偶爾都會想,這是我寫的嗎?雖然自己清楚的知道,這就是我寫的,但始終不想承認(rèn)。
還是要承認(rèn)才行
當(dāng)我在閱讀別人的代碼時,發(fā)現(xiàn)他們的代碼調(diào)理清晰,功能明確。有時候看到功能一樣的代碼,為啥自己的就是很丑呢。
拒絕接受
還不是因?yàn)闆]有使用頭文件來分開功能代碼,所有的功能代碼都在一個.c文件下,能不丑嗎?玩著玩著就幾百行代碼了。各種功能函數(shù)看的眼花繚亂。于是我決定痛改前非。做一下功能分類。相信自己一定可以。
不敢相信啊,我居然會痛改前非
于是我便開始去學(xué)習(xí)怎么使用頭文件,怎么在文件外定義函數(shù)調(diào)用。
感覺自己好厲害
這里就要講干貨了
1、什么是頭文件(.h)
在單片機(jī)C程序設(shè)計(jì)中,那些啥項(xiàng)目一般都按照功能進(jìn)行結(jié)構(gòu)化設(shè)計(jì),將一個項(xiàng)目劃分為多個功能,每一個功能的相關(guān)程序代碼放在一個.c文件中,稱之為一個模塊,xxx.c的xxx就是功能名。但光有一個.c肯定是不夠的,是不能被主函數(shù)所調(diào)用的。還需要一個.h文件,自然這個頭文件就出來了。
一個模塊由兩個文件組成,一個*.h文件,對模塊中的數(shù)據(jù)結(jié)構(gòu),函數(shù)原型,I/O端口進(jìn)行描述和聲明;另一個則是*.c文件,對數(shù)據(jù)實(shí)例或?qū)ο蠖x,以及函數(shù)算法具體實(shí)現(xiàn)。
咱還是舉個例子,具體說明一下吧。
舉個栗子實(shí)際說明一下啥是.h文件
上代碼:
DS1302.H
#ifndef __DS1302_H_#define __DS1302_H_//---包含頭文件---//#include#include//---重定義關(guān)鍵詞---//#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif//---定義ds1302使用的IO口---//sbit DSIO=P3^4;sbit RST=P3^5;sbit SCLK=P3^6;//---定義全局函數(shù)---//void Ds1302Write(uchar addr, uchar dat);uchar Ds1302Read(uchar addr);void Ds1302Init();void Ds1302ReadTime();//---加入全局變量--//extern uchar TIME[7];//加入全局變量#endif這里重新定義了關(guān)鍵字,定義了I/O端口,以及進(jìn)行了函數(shù)聲明。我們在主函數(shù)中只需要包含這個頭文件就可以調(diào)用DS1302.c中的函數(shù)。這里未貼出代碼,太長了呀。
2、.h文件的作用
作為項(xiàng)目設(shè)計(jì),除了對項(xiàng)目總體功能進(jìn)行詳細(xì)描述外,激素hi對內(nèi)閣模塊進(jìn)行詳細(xì)定義,也就是給出所有模塊的頭文件。通常.h頭文件要定義模塊中個函數(shù)的功能,以及輸入輸出參數(shù)的要求。也可以在頭文件中先規(guī)劃一下相應(yīng)的功能函數(shù),再根據(jù).h文件進(jìn)行設(shè)計(jì)、編程、調(diào)試。我們個人編程最主要的作用還是進(jìn)行模塊化管理,方便自己進(jìn)行開發(fā)和設(shè)計(jì)。
當(dāng)然如果是企業(yè)開發(fā),為了安全需要保密,模塊實(shí)現(xiàn)后可以鏈接文件obj或庫文件lib的方式提供給項(xiàng)目其他成員使用。因?yàn)椴挥锰峁┰创a,就可以進(jìn)行公開發(fā)行,保證我們程序員和公司的所有權(quán)。同時也可以防止別人有意無意修改產(chǎn)生非一致性,造成版本或功能混亂。
如果要引用模塊內(nèi)的數(shù)據(jù)或算法函數(shù),只要用include包含指定模塊的.h文件即可。
下一個:繼續(xù)
3、.h文件的基本組成
我們從上面的DS1302.h文件中可以看出.h文件有哪些組成嗎?
我覺得可以
仔細(xì)看,來分析一下。
#ifndef __DS1302_H_ // 這一句是防止重復(fù)引用,如果沒有定義過__DS1302_H_這個 文件就編譯下一句#define __DS1302_H_ // 此符號唯一,表示只要引用過一次,即#include,則定義符號__DS1302_H_#include // 這句沒啥好說的,就是包含51單片機(jī)的特殊寄存器#ifndef uchar // 這一句還是和上面的是一樣的,為了防止重復(fù)引用定義各種功能函數(shù)原型聲明///#endif // 這句是整個文件的結(jié)束標(biāo)志那怎么可能嘛
最后寫點(diǎn)
第一次嘗試加入表情包,不知道效果怎么樣。
對于頭文件暫時就說這么多,以后想起來再補(bǔ)充吧。
對于大型項(xiàng)目的設(shè)計(jì)編寫,模塊化設(shè)計(jì)的這種思想很重要,使用頭文件這種方式是比較方便的,讓代碼管理起來更加方便,設(shè)計(jì)起來更加方便。對于設(shè)計(jì)思路也有一定的幫助,只需要想我這個模塊該怎么寫。怎么樣去設(shè)計(jì)。這也就是模塊化程序設(shè)計(jì)的思想所在。
我覺得下面的更重要
分享更多單片機(jī)編程方面的知識,用自己踩過的坑給大家展示如何躲避他們。
關(guān)注并私信我,發(fā)送“08”即可獲取文中實(shí)例的完整程序及仿真文件。
關(guān)注+點(diǎn)贊+評論,在評論區(qū)說出你的想法,和我一起交流,你的支持是我創(chuàng)作的動力,一枚科技仔感謝您的閱讀。
期待你的評論喲
總結(jié)
以上是生活随笔為你收集整理的c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt模态界面设置setWindowMod
- 下一篇: Qt MQTT使用