自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

軟件項目中引用頭文件的幾種方法及要點

開發(fā) 項目管理
好的編程習慣,會直接影響代碼的質(zhì)量,在嵌入式C/C++中,頭文件的引用方式和方法有多種,同時一些細節(jié)也會影響你代碼質(zhì)量和編譯效率。

[[385666]]

 本文轉載自微信公眾號「strongerHuang」,作者strongerHuang。轉載本文請聯(lián)系strongerHuang公眾號。

好的編程習慣,會直接影響代碼的質(zhì)量,在嵌入式C/C++中,頭文件的引用方式和方法有多種,同時一些細節(jié)也會影響你代碼質(zhì)量和編譯效率。

下面就來說說與頭文件有關的知識;

1.引號“”和尖括號<>

#include使用引號“” 還是 尖括號<> 這個是有規(guī)定的。

通常來說:系統(tǒng)自帶的頭文件用尖括號括起來,這樣編譯器會在系統(tǒng)文件目錄下查找。

 

  1. #include 

用戶自定義的文件用雙引號括起來,編譯器首先會在用戶目錄下查找。

  1. #include "xxx.h" 

這里可以參看我之前分享的一篇文章:#include使用引號“”和尖括號<>的區(qū)別?

2.引用頭文件路徑問題

一個項目通常有多個源文件,你要讓編譯器找到這些存儲在不同路徑下的源文件,就必須要讓編譯器知道源代碼所在(路徑)位置。

引用頭文件路徑的方式有多種,在代碼中添加路徑,在IDE工具中添加路徑,還有分絕對路徑和相對路徑。下面就來簡單說說:

1).源代碼中引用頭文件

不使用集成開發(fā)環(huán)境(IDE),通常會在源代碼中添加路徑信息,比如在源代碼文件中引用頭文件:

  1. #include "/strongerhuang/robot/project/bsp/bsp_uart.h" 
  2. #include "../bsp/bsp_uart.h" 

但是,你會發(fā)現(xiàn)上面那個引用有什么區(qū)別嗎?

一個是絕對路徑:

  1. #include "/strongerhuang/robot/project/bsp/bsp_uart.h" 

一個是相對路徑:

  1. #include "../bsp/bsp_uart.h" 

2).IDE工具中引用頭文件

我們使用的Keil、IAR這種工具,可以不用像上面那樣,在源代碼中添加路徑頭文件,只需要在工程中配置編譯路徑即可。

比如Keil MDK:

通過菜單 Project -> Options for Taget -> C/C++:

Keil MDK默認是相對(工程文件的)路徑。

IAR EWARM類似:

通過菜單 Project -> Options -> C/C++ Compiler:

IAR默認是絕對路徑,通常我們需要修改為相對路徑。

3.頭文件相關內(nèi)容

這里順便說下關于頭文件的幾個重要內(nèi)容。

1).防止頭文件被重復引用

這個問題對于老司機來說,可能不是什么問題,但很多新手卻沒搞明白是什么意思。

通常,在某xxx.h頭文件中,會有類似如下的一部分代碼:

  1. #ifndef _XXX_H 
  2. #define _XXX_H 
  3.  
  4. #endif 

“#”這是一個預處理指令,什么意思呢?

簡單來說就是:如果沒有包含XXX.h頭文件,就包含;否則不包含(即不重復引用)。

2).全局(全部)頭文件

有些工程師喜歡把一個工程中所有的.h頭文件放在一個全局的頭文件(比如 global.h)中,然后,每個.c源文件去引用這個(global.h)頭文件。

這樣有利也有弊:

利:簡單方便,不用擔心因為漏掉一個 .h 文件而引起錯誤、警告;

弊:只要修改一個.h,工程就需要全局編譯,浪費很多時間;

所以,我個人建議不使用這種全局頭文件(global.h)來管理頭文件。

這種做法只是方便了一時,也不利于管理,在幾個源文件這種小項目中可能沒覺得什么。

但是,如果項目越來越大,特別幾十上百個源代碼,每個源文件代碼又比較大的情況下,你修改一個 .h 文件,只能慢慢等待編譯。

在項目比較敢的時候,這種做法可能會使你心態(tài)奔潰。

 

責任編輯:武曉燕 來源: strongerHuang
相關推薦

2021-03-08 09:32:04

Python文件命令

2024-12-04 09:47:26

C++頭文件實現(xiàn)類

2011-04-06 15:15:19

2009-09-01 18:35:53

C#判斷文件存在

2010-06-03 08:55:43

LINQ

2013-08-21 11:31:21

iPhone圖片方法

2014-08-22 15:50:52

WindowsLinux

2009-09-18 12:29:55

2010-05-17 15:17:06

MySQL常用操作

2018-09-29 11:02:52

WindowsLinux互訪

2020-06-28 10:07:31

加速軟件項目IT領導軟件開發(fā)

2020-01-10 16:23:44

Springboot停止服務Java

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2009-09-09 11:24:46

PHP實現(xiàn)MVC

2021-02-26 13:20:48

Shell空行Linux

2009-08-31 09:19:31

c#隱藏窗口

2011-06-16 10:48:33

session

2010-04-30 16:22:07

Unix終端

2010-01-22 14:46:25

C++語言

2010-10-26 09:23:03

Web Service
點贊
收藏

51CTO技術棧公眾號