九層妖塔 起於壘土
三、測試
先引入關於#include後的尖括號與引號的區別的經典解釋:
區分兩個概念:當前目錄和標準系統目錄。雙引號
系統先在源程式所在的目錄內查詢指定的包含檔案( 在當前目錄中查詢),如果找不到,再按照系統指定的標準方式到有關目錄中去尋找。
尖括號
系統將直接按照系統指定的標準方式到有關目錄中去尋找(在標準系統目錄中查詢檔案)。
據《c primer plus》說對於標準系統目錄一般ide(整合開發環境)可以通過選單選項進行設定,來指定用尖括號時的查詢路徑。對於
當前目錄,不同的ide 也有著不同的解釋。
keil中路徑包含的設定:在(project
->)options for target''
->c51
可用於設定當前專案的c51編譯器控制命令。在include paths
一欄用於設定包含檔案的目錄路徑。
keil在這裡的include paths
包含檔案的目錄路徑即是上文所說的標準系統目錄。
對於keil微控制器工程來說當前目錄是指,project資料夾的根目錄。
下圖是keil c51微控制器工程比較常見的工程形式,即只有乙個c檔案,沒有其他使用者自己寫的標頭檔案和c檔案。
具體的結構分析ing
圖1.單c檔案工程
用已經已經建好的工程,使用seg.h
標頭檔案和c檔案進行測試。(只需關注seg.h
標頭檔案和c檔案的變化即可)。
主c檔案:
seg.h
c檔案
seg.h
標頭檔案
按照爛大街的說法:雙引號用來包含自己寫的檔案。seg.h
的標頭檔案是自己寫的應該用雙引號括起來。但是此時seg.h
的標頭檔案是單獨放在乙個另乙個資料夾裡的。並不在下圖中。
(因為測試工程採用的是模組化程式設計,將每個模組分別用乙個c檔案和標頭檔案來寫,主c檔案也單獨放在了乙個資料夾中)
圖2.project的資料夾
此時,報錯顯示無法開啟seg.h
標頭檔案
由test_1:和test_2:對比可知,keil工程的當前目錄指的是project資料夾的根目錄
實測,在不新增include paths
路徑時,將雙引號換為尖括號也沒問題。?
在模組化程式設計中,為了便於管理各種檔案,習慣性地按照硬體外設分為不同地資料夾。比如把數碼管的相關程(seg.c
和seg.h
)單獨放在乙個名字為的seg的資料夾裡。此時keil不會自動找到seg.h
這個標頭檔案了。需要手動通過include paths
進行路徑新增。
keil中include 標頭檔案迴圈引用問題
在標頭檔案中使用 ifdef和 ifndef是非常重要的,可以防止雙重定義的錯誤。有時候,在b.h中會include a.h 在 c.h 中會include b.h 及include a.h 這時,如果不用ifndef endif,就會包含兩次a.h,產生錯誤。還是把頭檔案的內容都放在 ifndef...
Keil中的USE MicroLib說明
出處 在keil建立arm的工程時 其中有一項是選 use microlib 由於對keil不是很熟悉,於是就查了查,得到了以下資訊 microlib 是預設 c 庫的備選庫。它旨在與需要裝入到極少量記憶體中的深層嵌入式應用程式配合使用。這些應用程式不在作業系統中執行。microlib 進行了高度優...
C 中 include的問題
f0305.cpp 定義控制台應用程式的入口點。string長度可伸縮,比字元陣列靈活 通過字元指標操作字串,容易出錯。但string效能略遜於字元指標。include stdafx.h include iostream include include string 這是c 裡面的標頭檔案與c語言中...