前處理器變數
前處理器變數,在有的書中又叫前處理器常量,都是一個意思
- 為了避免名字衝突,習慣上處理器變數的所有字母一律大寫
- 前處理器變數在整個程式中是唯一的
- 前處理器變數只有兩種狀態,已定義或未定義,用於避免標頭檔案的多重包含而引起的重複定義
假設定義一個前處理器常量SALESITEM_H,可以用如下方式來預防多次包含同一標頭檔案:
#ifndef SALESITEM_H
#define SALESITEM_H
// Definition of Sales_itemclass and related functions goes here
//....
//..
#endif
條件指示
#ifndef SALESITEM_H測試 SALESITEM_H 前處理器變數是否未定義。如果 SALESITEM_H 未定義,那麼#ifndef 測試成功,跟在#ifndef 後面的所有行都被執行,直到發現#endif。相反,如果SALESITEM_H 已定義,那麼#ifndef 指示測試為假,該指示和#endif 指示間的程式碼都被忽略。
舉個例子:
定義一個標頭檔案
test_A.h
test_B.h
程式原始檔為
main.c
如果標頭檔案test_A.h中包含test_B.h,而在原始檔中又包含標頭檔案test_A.h和 test_B.h,這時你就會發現在原始檔中test_B.h被包含了兩次,一次是直接包含,一次是包含test_A.h時間接包含的,如果 test_B.h中有類的定義,這時就會發生重定義這樣低階的錯誤。有些同學就有疑問了,你明明知道了test_B.h已經在test_A.h中包含過了為什麼還要在原始檔中再次包含test_B.h呢?這不是多此一舉嗎?我想告訴你的是當你的程式比較龐大時,你就不會這樣想了,標頭檔案多的讓你頭皮發麻,你壓根就看不出來他們之間的包含關係。
順便在說說 #include<test.h>和#include"test.h"的區別
#include<test.h>包含的標頭檔案是標準庫標頭檔案,編譯器會在設定好的路徑搜尋test.h標頭檔案,系統標頭檔案可能以檔案方式儲存,也可能以系統特有的其他格式儲存。
#include"test.h"包含的標頭檔案是自定義的標頭檔案,編譯器在包含該標頭檔案的原始檔所在的位置開始搜尋,使用者定義的標頭檔案以檔案方式儲存。
至於帶字尾.h 和不帶字尾的標頭檔案得區別,C++標準化後的庫檔案包含的時候都不帶字尾,並且增加了名字空間這個機制,簡化了程式的編寫,一般自己定義的標頭檔案加上字尾,這個看個人愛好了
相關文章
- CSS 前處理器CSS
- Vue中使用CSS前處理器 stylus以及配置全域性變數的方法VueCSS變數
- CSS 前處理器—sassCSS
- 淺談 CSS 前處理器(一):為什麼要使用前處理器?CSS
- CSS | 前處理器(上)- SassCSS
- 使用CSS前處理器LessCSS
- css前處理器--Sass,Less,StylusCSS
- CSS 前處理器之目錄CSS
- C前處理器和C庫
- sed處理變數替換變數
- c#常用的前處理器指令C#
- C語言細節 前處理器C語言
- 瞭解下C# 前處理器指令C#
- CSS 前處理器中的迴圈CSS
- CSS 和 CSS 前處理器簡介CSS
- 開心檔之C++ 前處理器C++
- 使用Preprocessor前處理器語句對外部表進行介入處理
- 處理器運算位數
- 批處理-刪除環境變數變數
- block 對外部引用變數的處理BloC變數
- 關於批處理中的變數變數
- Linux 應用程式處理當前執行環境的環境變數(轉)Linux變數
- 反向索引處理前%索引
- 前%的處理--PostgreSQLSQL
- css前處理器scss/sass語法以及使用CSS
- 淺談 CSS 前處理器(二):如何快速上手?CSS
- 拋開語法,深度剖析CSS前處理器CSS
- 6款CSS前處理器 你值得擁有!CSS
- thinkphp 輸出變數使用函式處理PHP變數函式
- Windows批處理中的變數和值Windows變數
- MySQL自定義變數處理行號問題MySql變數
- 【數位dp】(涉及到處理前導0問題)
- 第六篇:使用前處理器幫助除錯除錯
- javascript變數名和函式名相同如何處理JavaScript變數函式
- Python 潮流週刊#66:Python 的前處理器(摘要)Python
- 去掉變數的前後空格變數
- js在函式中未定義的變數的處理JS函式變數
- 龍芯1A處理器引數介紹