在編譯之前進行的處理。 c語言的預處主要有三個方面的內容:1.巨集定義; 2.檔案包含; 3.條件編譯。 預處理命令以符號「#」開頭。
巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。
格式:#define識別符號文字
其中的識別符號就是所謂的符號常量,也稱為「巨集名」。
預處理(預編譯)工作也叫做巨集展開:將巨集名替換為文字(這個文字可以是字串、可以是**等)。
掌握"巨集"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,準確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:#define pi 3.1415926
把程式中全部的識別符號pi換成3.1415926
說明:
(1)巨集名一般用大寫2.帶引數的巨集:(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義
(3)可以用#undef命令終止巨集定義的作用域
(4)巨集定義可以巢狀
除了一般的字串替換,還要做引數代換
格式:#define 巨集名(參數列)文字
例如:#define s(a,b) ab
area=s(3,2);第一步被換為area=ab; ,第二步被換為area=3*2;
類似於函式呼叫,有乙個啞實結合的過程:
(1)實參如果是表示式容易出問題乙個檔案包含另乙個檔案的內容#define s® rr
area=s(a+b);第一步換為area=rr;,第二步被換為area=a+ba+b;
正確的巨集定義是#define s® (®®)
(2)巨集名和引數的括號間不能有空格
(3)巨集替換只作替換,不做計算,不做表示式求解
(4)函式呼叫在編譯後程式執行時進行,並且分配記憶體。巨集替換在編譯前進行,不分配記憶體
(5)巨集的啞實結合==不存在型別,也沒有型別轉換。
(6)巨集展開使源程式變長,函式呼叫不會
(7)巨集展開不佔執行時間,只佔編譯時間,函式呼叫佔執行時間(分配記憶體、保留現場、值傳遞、返回值)
格式:#include 「檔名」
或#include 《檔名》
編譯時以包含處理以後的檔案為編譯單位,被包含的檔案是原始檔的一部分。
編譯以後只得到乙個目標檔案.obj
被包含的檔案又被稱為「標題檔案」或「頭部檔案」、「標頭檔案」,並且常用.h作副檔名。
修改標頭檔案後所有包含該檔案的檔案都要重新編譯
標頭檔案的內容除了函式原型和巨集定義外,還可以有結構體定義,全域性變數定義:
(1)乙個#include命令指定乙個標頭檔案;有些語句希望在條件滿足時才編譯。(2)檔案1包含檔案2,檔案2用到檔案3,則檔案3的包含命令#include應放在檔案1的頭部第一行;
(3)包含可以巢狀;
(4)《檔名》稱為標準方式,系統到頭檔案目錄查詢檔案,
"檔名"則先在當前目錄查詢,而後到頭檔案目錄查詢;
(5)被包含檔案中的靜態全域性變數不用在包含檔案中宣告。
格式:(1)
#ifdef 識別符號
程式段1
#else
程式段2
#endif
或#ifdef
程式段1
#endif
當識別符號已經定義時,程式段1才參加編譯。
格式:(2)
#ifndef 識別符號
#define 標識1
程式段1
#endif
如果識別符號沒有被定義,則重定義標識1,且執行程式段1。
格式:(3)
#if 表示式1
程式段1
#elif 表示式2
程式段2
……#elif 表示式n
程式段n
#else
程式段n+1
#endif
當表示式1成立時,編譯程式段1,當不成立時,編譯程式段2。
注:⚠️
使用條件編譯可以使目標程式變小,執行時間變短。預編譯使問題或演算法的解決方案增多,有助於我們選擇合適的解決方案。
此外,還有布局控制:#pragma,這也是我們應用預處理的乙個重要方面,主要功能是為編譯程式提供非常規的控制流資訊。
C語言預處理
c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...
C語言預處理
預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...
c語言預處理
預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...