關於C語言中的巨集

2021-09-25 03:59:15 字數 979 閱讀 6383

巨集:macro,是一種批量處理的稱謂。

巨集是一種規則或模式,或稱語法替換。

在預編譯時進行,稱作巨集展開。

c語言中的巨集定義:

1)#define是預處理器處理的單元實體之一;

2)#define定義的巨集可以出現在程式的任意位置;

3)#define定義之後的**都可以使用這個巨集。

定義巨集常量:

1)可以直接使用;

2)本質為字面量。

巨集定義表示式:

1)#define表示式的使用類似函式呼叫,但是巨集定義是原地展開,沒有呼叫開銷,而函式是跳轉執行再返回,有比較大的開銷;

2)#define表示式比函式更容易出錯,因為巨集定義不會進行語法分析,型別檢查,只是文字替換,出錯後原因也更難找;

3)巨集表示式只會直接文字直接替換,用「實參」完全替代形參,不進行任何運算;

4)巨集表示式被預處理器處理,編譯器不知道巨集表示式的存在;

5)巨集表示式中不能出現遞迴定義。

巨集與作用域:

1)巨集定義並沒有作用域的限制;

2)#define定義之後的**都可以使用這個巨集。

內建巨集:

__file__ 被編譯的檔名

__line__ 當前行號

__date__ 編譯時的日期

__time__ 編譯時的時間

__stdc__ 編譯器是否遵循標準c規範

巨集規範寫法:

1)巨集名大寫;

2)巨集定義語句末尾不加分號;

3)巨集函式的形式引數不加型別。

注意:1)巨集定義可以巢狀;

2)巨集定義不能出現在字串的「」中;

3)巨集定義不分配記憶體,變數定義才分配記憶體;

4)巨集定義只是簡單的替換,而且是直接對原始碼的字串替換;

5)巨集函式和自定義函式相比,效率更高但是安全性低且會使編譯生成的目標檔案變大;巨集函式沒有分配和釋放棧幀、傳參、傳返回值等一系列工作,適合那些簡短並且頻繁呼叫的函式。

參考:

c語言中關於巨集

我們在寫c語言程式中,已經初步了解到了 define的用法,下面對 define做乙個詳細的用法說明。格式如下 define name stuff有了這條指令之後,每當有name出現,就會被預處理器替換為stuff。例 define reg register define do forever fo...

關於C語言中的巨集

define pi 3.14 define zhouchang r 2 pi r 定義帶引數的巨集 undef pi 結束巨集 使用 ifdef ifndef else endif執行條件編譯 ifdefine 巨集名稱 語句 else 語句 endif define age 39 int main...

C語言中的巨集

c語言中如何使用巨集c 和c 中的巨集 macro 屬於編譯器預處理的範疇,屬於編譯期概念 而非執行期概念 下面對常遇到的巨集的使用問題做了簡單總結。在c語言的巨集中,的功能是將其後面的巨集引數進行字串化操作 stringfication 簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上乙個...