新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機C語言中.c文件和.h文件的關聯

        51單片機C語言中.c文件和.h文件的關聯

        作者: 時間:2016-11-23 來源:網絡 收藏
        1)h文件作用

        1 方便開發:包含一些文件需要的共同的常量,結構,類型定義,函數,變量申明;
        2 提供接口:對一個軟件包來說可以提供一個給外界的接口(例如: stdio.h)。

        本文引用地址:http://www.104case.com/article/201611/320244.htm

        2)h文件里應該有什么
        常量,結構,類型定義,函數,變量申明。

        3)h文件不應該有什么
        變量定義, 函數定義。

        4)extern問題
        對于變量需要extern;
        對于函數不需要因為函數的缺省狀態是extern的.如果一個函數要改變為只在文件內可見,加static。

        5)include包含問題
        雖然申明和類型定義可以重復,不過推薦使用條件編譯。

        #ifndef _FILENAME_H,

        #define _FILENAME_H

        ……

        #endif

        6)應該在那兒包含h文件
        在需要的地方.比如某個提供接口的h文件僅僅被1.c文件需要,那么就在1.c文件里包含。


        編寫的程序一般會有.H文件和相對應的.C文件,.H文件是聲明所用,.C文件是其函數實現部分。在調用時只要包含.H文件即可,我們沒有聽說過#i nclude "delay.c"這類的程序,同時也不提倡使用這個形式。


        在delay.h文件中: //對調用的函數聲明
        #ifndef __DELAY_H__

        #define __DELAY_H__


        extern void Delayms(unsigned int n);

        #endif


        在delay.c文件中: //函數實現部分

        #i nclude

        //for crystal 11.0592M

        void Delayms(unsigned int n)

        {

        unsigned int i,j;

        for(j=n;j>0;j--)

        for(i=112;i>0;i--);

        }

        在主程序main.c中

        #i nclude //在主程序包含.h文件,不能包含.c文件

        ……


        上述方法仍然要求每建立一個工程就需要把對應的頭文件復制到工程的文件夾里,這樣看來仍然是比較麻煩的,這時還有另外一中方法就是將做好的頭文件放在一個文件夾中,然后將這個文件夾整體拷貝到..KEILC51INC下面,以后若需要使用某個頭文件,就如使用KEIL自帶的頭文件一樣方便了,在主函數mani()之前有一句#i nclude 就可以在main()中使用其中的函數了。


        參考資料:

        1)h文件里變量(函數)申明用不用extern

        http://www.unixresources.net/linux/clf/program/archive/00/00/33/65/336569.html

        2).c文件和.h文件的概念與聯系

        http://www.vckbase.com/document/viewdoc/?id=1607

        3)過馬路,左右看

        http://www.vckbase.com/document/viewdoc/?id=1606

        4).c 和 .h文件的不同

        http://hi.baidu.com/mfantastic/blog/item/d6fddd39793494f73a87ce0c.html

        5)C51包含頭文件方法

        http://blog.ednchina.com/eleclike/52862/message.aspx

        4).c 和 .h文件的不同

        http://hi.baidu.com/mfantastic/blog/item/d6fddd39793494f73a87ce0c.html

        模塊劃分的"劃"是規劃的意思,意指怎樣合理的將一個很大的軟件劃分為一系列功能獨立的部分合作完成系統的需求。C語言作為一種結構化的程序設計語言,在模塊的劃分上主要依據功能(依功能進行劃分在面向對象設計中成為一個錯誤,牛頓定律遇到了相對論),C語言模塊化程序設計需理解如下概念:

        (1)模塊即是一個.c文件和一個.h文件的結合,頭文件(.h)中是對于該模塊接口的聲明;

        (2)某模塊提供給其它模塊調用的外部函數及數據需在.h中文件中冠以extern關鍵字聲明;

        (3)模塊內的函數和全局變量需在.c文件開頭冠以static關鍵字聲明;

        (4)永遠不要在.h文件中定義變量!定義變量和聲明變量的區別在于定義會產生內存分配的操作,是匯編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接階段從其它模塊尋找外部函數和變量。如:



        int a = 5;

        #include "module1.h"

        #include "module1.h"

        #include "module1.h"

          以上程序的結果是在模塊1、2、3中都定義了整型變量a,a在不同的模塊中對應不同的地址單元,這個世界上從來不需要這樣的程序。正確的做法是:



        extern int a;

        #include "module1.h" int a = 5;

        #include "module1.h"

        #include "module1.h"

        這樣如果模塊1、2、3操作a的話,對應的是同一片內存單元。



        關鍵詞: 51單片機C語

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 海城市| 吐鲁番市| 阜南县| 晋州市| 海原县| 富源县| 丹江口市| 玉门市| 晋宁县| 大厂| 依安县| 和平县| 鹤山市| 景泰县| 航空| 孝义市| 三门县| 广汉市| 丹江口市| 周口市| 平远县| 福鼎市| 涟水县| 绥棱县| 响水县| 泗洪县| 家居| 潞西市| 乐陵市| 绥棱县| 金塔县| 湖北省| 甘孜| 南阳市| 昌图县| 封丘县| 景宁| 旌德县| 喜德县| 曲麻莱县| 土默特左旗|