關注+星標公眾
作者 | strongerhuang
好的程式設計習慣,會直接影響**的質量,在嵌入式c/c++中,標頭檔案的引用方式和方法有多種,同時一些細節也會影響你**質量和編譯效率。
下面就來說說與標頭檔案有關的知識;
嵌入式專欄
引號「」和尖括號<>
#include使用引號「」 還是 尖括號<> 這個是有規定的。
通常來說:系統自帶的標頭檔案用尖括號括起來,這樣編譯器會在系統檔案目錄下查詢。
#include
使用者自定義的檔案用雙引號括起來,編譯器首先會在使用者目錄下查詢。
#include "***.h"
這裡可以參看我之前分享的一篇文章:#include使用引號「」和尖括號<>的區別?嵌入式專欄
引用標頭檔案路徑問題
乙個專案通常有多個原始檔,你要讓編譯器找到這些儲存在不同路徑下的原始檔,就必須要讓編譯器知道源**所在(路徑)位置。
引用標頭檔案路徑的方式有多種,在**中新增路徑,在ide工具中新增路徑,還有分絕對路徑和相對路徑。下面就來簡單說說:
1.源**中引用標頭檔案
不使用整合開發環境(ide),通常會在源**中新增路徑資訊,比如在源**檔案中引用標頭檔案:
#include "/strongerhuang/robot/project/bsp/bsp_uart.h"
#include "../bsp/bsp_uart.h"
但是,你會發現上面那個引用有什麼區別嗎?
乙個是絕對路徑:
#include "/strongerhuang/robot/project/bsp/bsp_uart.h"
乙個是相對路徑:
#include "../bsp/bsp_uart.h"
2.ide工具中引用標頭檔案我們使用的keil、iar這種工具,可以不用像上面那樣,在源**中新增路徑標頭檔案,只需要在工程中配置編譯路徑即可。
比如keil mdk:
通過選單 project -> options for taget -> c/c++:
keil mdk預設是相對(工程檔案的)路徑。
keil系列教程05_工程目標選項配置(一)
keil系列教程06_工程目標選項配置(二)
iar ewarm類似:
通過選單 project -> options -> c/c++ compiler:
iar預設是絕對路徑,通常我們需要修改為相對路徑。
iar系列教程06_工程節點擊項配置(一)
iar系列教程07_工程節點擊項配置(二)
嵌入式專欄
這裡順便說下關於標頭檔案的幾個重要內容。
1.防止標頭檔案被重複引用
這個問題對於老司機來說,可能不是什麼問題,但很多新手卻沒搞明白是什麼意思。
通常,在某***.h標頭檔案中,會有類似如下的一部分**:
#ifndef _***_h
#define _***_h
#endif
「#」這是乙個預處理指令,什麼意思呢?
簡單來說就是:如果沒有包含***.h標頭檔案,就包含;否則不包含(即不重複引用)。
2.全域性(全部)標頭檔案
有些工程師喜歡把乙個工程中所有的.h標頭檔案放在乙個全域性的標頭檔案(比如 global.h)中,然後,每個.c原始檔去引用這個(global.h)標頭檔案。
這樣有利也有弊:
利:簡單方便,不用擔心因為漏掉乙個 .h 檔案而引起錯誤、警告;
弊:只要修改乙個.h,工程就需要全域性編譯,浪費很多時間;
所以,我個人建議不使用這種全域性標頭檔案(global.h)來管理標頭檔案。
這種做法只是方便了一時,也不利於管理,在幾個原始檔這種小專案中可能沒覺得什麼。
但是,如果專案越來越大,特別幾十上百個源**,每個原始檔**又比較大的情況下,你修改乙個 .h 檔案,只能慢慢等待編譯。
在專案比較敢的時候,這種做法可能會使你心態奔潰。
軟體專案中引用標頭檔案的使用方法!
好的程式設計習慣,會直接影響 的質量,在嵌入式c c 中,標頭檔案的引用方式和方法有多種,同時一些細節也會影響你的 質量和編譯效率。下面就來說說與標頭檔案有關的知識 嵌入式專欄 引號 和尖括號 include使用引號 還是 尖括號 這個是有規定的。通常來說 系統自帶的標頭檔案用尖括號括起來,這樣編譯...
HTML中引用CSS的幾種方法
指寫在標籤裡的style元素的值 style color ff0000 行內樣式p 寫在html頁面的head標籤裡。type text css xx style 也是在head標籤內部進行,但是需要在外部專門寫css檔案。rel stylesheet href css demo.css 同樣在he...
獲取專案中的檔案方法
tomcat環境獲取檔案方法 string htmlfile request.getservletcontext getrealpath html zhantu.html 下面是我在jersey框架中開發的 springboot環境獲取resouces下的檔案方法 resourceutils.get...