為了與主流的編程素養(yǎng)接軌,我們本章講解如何書寫簡(jiǎn)潔并且高效率的代碼以及首次運(yùn)用多文件編程。多文件的作用是方便編寫大程序時(shí)更加的模塊化,那么至于原理,頭文件包含關(guān)系等這些知識(shí)還需讀者自己再多多補(bǔ)補(bǔ)C語(yǔ)言知識(shí)了。
1.多文件的優(yōu)勢(shì)
運(yùn)用多文件編程是為了使我們教程無(wú)需每次都貼出相同功能的代碼,像第一階段最后的一個(gè)例程,已經(jīng)有很多代碼完全可以前往以前的例程里復(fù)制即可,筆者也是考慮到一開始我們都是從單個(gè)“.c”文件入門單片機(jī)編程,所以之前的例程都是提供完整的代碼給大家方便復(fù)制移植到自己的單個(gè)“.c”工程文件中。
可后期的例程里我們的代碼量越來越大,顯然全部給出就不合適了,所以我們把經(jīng)常使用的功能模塊代碼封裝起來放在另一個(gè)“.c”文件里提供給我們調(diào)用,這個(gè)“.c”文件命名為“function.c”。以后我們提供的代碼就是“main.c”的內(nèi)容,這樣教程供給的代碼數(shù)量就會(huì)精簡(jiǎn)一些。
2.typedef
第一階段里我們的代碼有一部分可以再簡(jiǎn)化的,比如unsigned int的定義,我們用“typedef unsigned int u16;”聲明,u16就是用一個(gè)更簡(jiǎn)潔的名字來取代“unsigned int”去定義16位的變量。
用“typedef unsigned char u8;”的話,u8就是用來定義8位的變量,或者像之前定義的數(shù)組也可以像這樣
“u8 LEDSET[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};”去定義。
那么有時(shí)需要定義32位的變量,就用“typedef unsigned long u32;”即可。
雖然#define與typedef的作用有點(diǎn)意思相近,但“#define u16 unsigned int”是不嚴(yán)謹(jǐn)?shù)木帉懥?xí)慣,不建議這樣使用,原因大家可上網(wǎng)了解。
3.準(zhǔn)備工作
首次講解多文件編程,這里大家跟著步驟來做。
新建一個(gè)“.c”文件,命名為“function.c”后保存。
再新建一個(gè)“function.h”
雙擊“Source Group 1”添加文件進(jìn)去
在“function.h”先添加如下內(nèi)容:
#ifndef __FUNCTION_H__ #define __FUNCTION_H__ typedef unsigned char u8;//對(duì)數(shù)據(jù)類型進(jìn)行聲明定義 typedef unsigned int u16; typedef unsigned long u32; #endif
后續(xù)工作我們下一講再講解。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程