嵌入式作業系統核心原理和開發(標頭檔調整)

來源:互聯網
上載者:User

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

 

    很長一段時間,我個人對標頭檔的功能瞭解得不是很明白。雖然在平時的開發中,對於標頭檔也沒有犯過什麼大的錯誤,但是總覺得對標頭檔這塊理解得不是很透徹。所以趁著這次嵌入式開發的機會,好好對標頭檔這部分的內容進行了分析和總結。下面我們主要從兩個方面對標頭檔進行分析,即標頭檔是做什麼的,標頭檔編寫的過程中要注意些什嗎?

 

    (1)標頭檔的作用

    其實很多的程式設計語言是沒有標頭檔的,比如說C#、java語言。為什麼呢,因為這些語言資料結構和函數操作是捆綁在一起的。而C語言則不一樣,它是把標頭檔和實現檔案分開來的。標頭檔的內容主要有哪些呢,也就是嵌套標頭檔、宏定義、資料類型、函數原型定義、static函數等等。

 

    (2)標頭檔的編寫

 

    a)標頭檔要簡潔

    很多源檔案在編寫的時候常常喜歡添加很多的標頭檔,不管是需要的還是不需要的。可是,我們要知道,標頭檔的作用主要是定義資料類型和函數類型的。本質上來說,標頭檔很少會建立實質性的代碼,不管是資料區段的內容,還是程式碼片段的內容。簡潔的標頭檔不僅有利於快速排除編譯故障,還能提高編譯的速度。有經驗的朋友都知道,源檔案的編譯錯誤比較容易解決,而標頭檔的編譯錯誤常常十分複雜。所以,我們必須在一切可能的條件下保證標頭檔的簡潔。

 

    b)標頭檔注意互斥性

   注意標頭檔的互斥性,需要我們在開發中養成良好的編程習慣。不管是建立標頭檔,首先要做的事情就是添加編譯宏。看上去這是一個十分不起眼的舉動,但是常常可以協助你減少許多不必要的麻煩。

#ifndef _DATA_H#define _DATA_H#endif

    c)全域變數不要在標頭檔裡面定義,如果是外部參考,必須添加上extern

extern int g_Data;  

   

    d)不要在標頭檔裡面實現函數,如果要實現,也必須要添加static

static int add(int a, int b){return a + b;}

    e)標頭檔當中如果需要嵌入別的標頭檔,那麼只是為了引用另外一個標頭檔的資料結構

 

    f)標頭檔中引用的資料類型如果沒有說明,那麼在被源檔案引用的時候,只要保證其他的標頭檔存在這個資料類型定義即可

 

    g)源檔案引用標頭檔的時候需要注意標頭檔的順序,有的時候順序變了,可能編譯就失敗了。原因就是之前後面標頭檔中定義的資料類型找不到出處了

 

    h)某些工程沒有把標頭檔和源檔案綁定在一起,修改標頭檔必須刪除工程重新編譯

 

    i)標頭檔的存在只是為了源檔案才存在的,如果沒有必要不要寫標頭檔。要寫,影響範圍也要控制在最小的範圍內

 

    j)如果標頭檔定義了資料結構,那麼需要嵌入引用標頭檔,反之如果只是指標,聲明一下即可,比如說

struct _Data;typedef struct _Data Data;

 

   k)如果有可能經常整理自己的標頭檔,全部刪除再一個一個添加,這樣就知道哪些是我們需要的,哪些不是

 

    l)對於某些宏,如果不確定檔案本身是在哪裡定義的,可以在源檔案中再定義一次,這樣編譯器就會精確提示我們原來這個宏是在那裡定義的

    好了,差不多就這麼多了。

 

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.