8.1.1 無引數的巨集定義(巨集常量)
如果在程式中大量使用到了100這個值,那麼為了方便管理,我們可以將其定義為:
const int num = 100; 但是如果我們使用num定義乙個陣列,在不支援c99標準的編譯器上是不支援的,因為num不是乙個編譯器常量,如果想得到了乙個編譯器常量,那麼可以使用:
#define num 100
在編譯預處理時,將程式中在該語句以後出現的所有的num都用100代替。這種方法使使用者能以乙個簡單的名字代替乙個長的字串,在預編譯時將巨集名替換成字串的過程稱為「
巨集展開」
。巨集定義,只在巨集定義的檔案中起作用。
#define pi 3.1415
void
test()
說明:巨集名一般用大寫,以便於與變數區別;
巨集定義可以是常數、表示式等;
巨集定義不作語法檢查,只有在編譯被巨集展開後的源程式才會報錯;
巨集定義不是c語言,不在行末加分號;
巨集名有效範圍為從定義到本原始檔結束;
可以用#undef命令終止巨集定義的作用域;
在巨集定義中,可以引用已定義的巨集名;
8.1.2 帶引數的巨集定義(巨集函式)
在專案中,經常把一些短小而又頻繁使用的函式寫成巨集函式,這是由於巨集函式沒有普通函式引數壓棧、跳轉、返回等的開銷,可以調高程式的效率。
巨集通過使用引數,可以建立外形和作用都與函式類似地類函式巨集(function-like macro). 巨集的引數也用圓括號括起來。
#define sum(x,y) ((x)+(y))
void
test()
注意:
巨集的名字中不能有空格,但是在替換的字串中可以有空格。ansi c允許在引數列表中使用空格;
用括號括住每乙個引數,並括住巨集的整體定義。
用大寫字母表示巨集的函式名。
如果打算巨集代替函式來加快程式執行速度。假如在程式中只使用一次巨集對程式的執行時間沒有太大提高。
8.2.1 檔案包含處理
「檔案包含處理」是指乙個原始檔可以將另外乙個檔案的全部內容包含進來。c語言提供了#include命令用來實現「檔案包含」的操作。
8.2.2 #incude<>和#include""區別
"" 表示系統
先在file1.c所在的當前目錄找file1.h,如果找不到,
再按系統指定的目錄檢索。
< > 表示系統
直接按系統指定的目錄檢索。
注意:
1. #include <>常用於包含庫函式的標頭檔案;
2. #include ""常用於包含自定義的標頭檔案;
3. 理論上#include可以包含任意格式的檔案(.c .h等) ,但一般用於
標頭檔案的包含;
C語言編譯預處理
title date br description c語言編譯預處理 2019 11 06 14 35 32 0800 預處理 c語言 c語言預處理是對源 進行初步轉換 碼農有道 c源程式 編譯預處理 編譯 優化程式 匯程式設計序 鏈結程式 可執行檔案其中編譯預處理階段,讀取c源程式,對其中的預處理...
c語言整理編譯預處理
c程式執行過程 源程式 編譯預處理 編譯 優化程式 匯程式設計序 鏈結程式 可執行檔案。編譯預處理時,先要讀取源程式,對預處理指令 開頭指令 以及特殊的符號進行處理,比如define 替換指令,也會進行刪除注釋,多餘的空白字元,然後產生的預處理檔案或者程式傳給編譯器,在程式中以 開頭的編譯指令稱為預...
C 編譯預處理
c 的預處理是編譯器在編譯源程式之前,先由預處理器處理預處理指令,由於在c 源程式中有各種編譯命令,而這些編譯命令由於是在程式被正常編譯之前執行的,故稱為預處理命令 或指令 預編譯命令用來擴充c 程式設計的環境,使得程式書寫變得更加簡練和清晰。c 提供的預處理功能主要有以下3種 巨集定義命令。檔案包...