所有預處理指令都以符號#開頭。此外,每個預處理指令必須單獨占用一行。
指令#define定義了乙個識別符號及乙個字串行(即字元集合)。在源程式中每次遇到該識別符號時,就用定義的字串行替換它。識別符號被稱為巨集名,替換過程稱為巨集替換。例如:
#define datou_shuai 1
#define datou_bushuai 2
注意與const常變數替換作用的場景區分開
const int datou_shuai = 1在編譯時起作用
#define datou_shuai 1在預編譯時起作用
const 型別為浮點數時則是要從記憶體讀資料
注意,該語句沒有分號。在識別符號和字串行之間可以有任意個空格,但是一旦字串行開始,就只能由一新行結束。
//計算時應該為a+5*b+6,即5+5*4+6=31
巨集和函式的區別
1.巨集在預編譯時進行替換,函式編譯和鏈結時形成**
2.巨集不存在現場的保護和恢復,函式要進行現場保護和恢復
3.使用時巨集有***,可能會引數值
4.巨集和型別無關,函式和型別有關
指令#include告訴編譯器除了讀包含#include的乙個原始檔外還要讀取另乙個原始檔,被讀入的原始檔必須用雙引號或尖括號括起來。
檔名是用引號還足用尖括號括起來決定了指定檔案的查詢方法。如果檔名用尖括號括起來,則檔案以編譯器的建立者定義的方式進行在找,通常,這意味著從為「包含檔案」設定的一些特殊目錄中查
找。如果檔名用引號括起來,則檔案以其他實現所定義的方式進行查詢。對許多編譯器來說,這意味著查詢當前工作目錄。如果未找到,則按檔名括在尖括號中的方式繼續查詢。
通常,許多程式設計師使用尖括號來包含標準標頭檔案,引號的使用則是為了包含與程式關聯的檔案,但這兩種用法沒有硬性的規定。
include的本質是將".h"中的內容拷貝到「.cpp」中。從而生成「.i」檔案。
注:陣列裡使用 #include 時,#include要從寫,且屁股後不可加內容,數字要用逗號隔開,而字串每行都要用雙引號引起來。例:
//主函式
int ar=
;char br=
;內容"you are a dog\n"
"i an a man"
該方法也可以初始化過長的字串。
最後插入個結構體大小計算圖
用#define計算結構體大小
關於#ifndef的解釋,預編譯起作用。
C語言 預處理器
如果想在下一行延續指令,則在當前行末尾使用 字元 帶引數的巨集 define max x,y x y x y define is even n n 2 0 則i max j k,m n if is even i i 將被替換為 i j k m n j k m n if i 2 0 i 巨集的替換列表...
C語言 預處理器
指令 描述 define 定義巨集 macro include 包含乙個源 檔案 undef 取消已定義的巨集 ifdef 如果巨集已經定義,則返回真 ifndef 如果巨集沒有定義,則返回真 if如果給定條件為真,則編譯下面 else if 的替代方案 endif 結束乙個if.else條件編譯塊...
C語言 預處理器
6 gcc編譯器檢視替換後的編碼 7 標頭檔案相互包含導致的重定義錯誤 指令 描述 define 定義巨集 include 包含乙個源 檔案 undef 取消已定義的巨集 ifdef 如果巨集已經定義,則返回真 ifndef 如果巨集沒有定義,則返回真 if如果給定條件為真,則編譯下面 else i...