根據多年編寫下位機的經驗,發現如果函數多了,對於函數的整體架構的管理也就顯得十分重要,如果排布好了會給人一種清清爽爽的感覺,但到底怎麼排布函數,怎麼把不同的函數放在對應的文件裏呢?下面我們就來解決這個問題:
1、首先,我們會建立一個.c文件,這個文件存放着main函數,是整個工程的程序入口點,但這個文件最好保持清爽,因爲這裏的結構直接展示了函數的運行順序,如果把子函數也放在這個文件裏面,那main函數就會淹沒在衆多函數中,顯得一團亂。理想狀態是這樣的:
2、下面就得降到自定義函數的定義了,我們的自定義函數到底怎麼管理才能在可以運行的情況下井井有條呢,即使有很多的子函數,也能清晰查看?我這裏分爲子函數頭文件和子函數功能文件進行子函數的管理,下面講講子函數頭文件的功能:
子函數頭文件顧名思義就是存放頭文件的文件,同時也用來存放一下子函數需要用到的變量定義和子函數定義。
注意:
①、非系統變量(如int\char等)需要加上extern,如:extern unsigned char con;表示此變量爲外部變量,即在別的文件中使用的變量,當對應文件要使用到這些變量時,也同樣需要進行定義,如:unsigned char con = 0;變量初始化必須在要用到這些變量的文件中定義。
②、系統變量,如單片機引腳定義(sbit red = P1^2;),不能加extern,否則編譯會出錯,也正因爲這樣,它只能出現一次,不管在頭文件還是在功能文件中都可以。
③、需要標註好
#ifndef _read_card_H #define _read_card_H . . . #end
④、對於函數的申明不需要添加extern。
例圖如下:
3、功能函數由於要用到頭文件,所以要把包含所有頭文件的文件給當作它的直接上級頭文件。