C語言預處理命令總結

2021-08-11 21:30:33 字數 1734 閱讀 8981

包含標準庫的標頭檔案建議用尖括號,包含自定義的標頭檔案建議用雙引號。如:

#include 

#include "myheader.h"

巨集定義是用巨集名來表示乙個字串,在巨集展開時又以該字串取代巨集名,這只是一種簡單的替換。字串中可以含任何字元,可以是常數,也可以是表示式,預處理程式對它不作任何檢查,如有錯誤,只能在編譯已被巨集展開後的源程式時發現。

巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起替換。

巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用#undef命令。

巨集名在源程式中若用引號括起來,則預處理程式不對其作巨集代換。

巨集定義允許巢狀,在巨集定義的字串中可以使用已經定義的巨集名,在巨集展開時由預處理程式層層代換。

習慣上巨集名用大寫字母表示,以便於與變數區別。但也允許用小寫字母。

可用巨集定義表示資料型別,使書寫方便。

帶參巨集定義中,形參之間可以出現空格,但是巨集名和形參列表之間不能有空格出現。

define max(a,b) (a>b)?a:b —-> #define max (a,b) (a>b)?a:b (錯)

在帶參巨集定義中,不會為形式引數分配記憶體,因此不必指明資料型別。而在巨集呼叫中,實參包含了具體的資料,要用它們去代換形參,因此必須指明資料型別。

這一點和函式是不同的:在函式中,形參和實參是兩個不同的變數,都有自己的作用域,呼叫時要把實參的值傳遞給形參;而在帶引數的巨集中,只是符號的替換,不存在值傳遞的問題。

在巨集定義中,字串內的形參通常要用括號括起來以避免出錯。

巨集展開僅僅是字串的替換,不會對表示式進行計算;巨集在編譯之前就被處理掉了,它沒有機會參與編譯,也不會占用記憶體。而函式是一段可以重複使用的**,會被編譯,會給它分配記憶體,每次呼叫函式,就是執行這塊記憶體中的**。

預處理指令是以#號開頭的**行,#號必須是該行除了任何空白字元外的第乙個字元。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元,整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源**做某些轉換。

指令說明

空指令,無任何效果

include

包含乙個源**檔案

define

定義巨集undef

取消已定義的巨集

if如果給定條件為真,則編譯下面**。

ifdef

如果巨集已經定義,則編譯下面**。

ifndef

如果巨集沒有定義,則編譯下面**

elif

如果前面的#if給定條件不為真,當前條件為真,則編譯下面**

endif

結束乙個#if……#else條件編譯塊

預處理功能是c語言特有的功能,它是在對源程式正式編譯前由預處理程式完成的,程式設計師在程式中用預處理命令來呼叫這些功能。

巨集定義可以帶有引數,巨集呼叫時是以實參代換形參,而不是「值傳送」。

為了避免巨集代換時發生錯誤,巨集定義中的字串應加括號,字串中出現的形式引數兩邊也應加括號。

檔案包含是預處理的乙個重要功能,它可用來把多個原始檔連線成乙個原始檔進行編譯,結果將生成乙個目標檔案。

條件編譯允許只編譯源程式中滿足條件的程式段,使生成的目標程式較短,從而減少了記憶體的開銷並提高了程式的效率。

使用預處理功能便於程式的修改、閱讀、移植和除錯,也便於實現模組化程式設計。

C語言總結 預處理命令

c語言總結 預處理命令 2019 3 30 預處理命令可以提高程式設計效率,但其不是c語句,編譯系統不能直接對它們進行編譯,而是在編譯前會轉換為c源程式,然後編譯時去掉了預處理命令。1.巨集定義 巨集定義在使用時,系統只是用巨集名之後的部分替換語句中包含的巨集名,如果是含參巨集定義,將實際的引數替換...

C語言 預處理命令

我們可以在c源程式中插入傳給編譯程式的各中指令,這些指令被稱為預處理器指令,它們擴充了程式設計的環境。現把常用的預處理命令總結如下 1.預處理程式 按照ansi標準的定義,預處理程式應該處理以下指令 if ifdef ifndef else elif endif define undef line ...

C語言 預處理命令

一 巨集定義 在 語言源程式中允許用乙個識別符號來表示乙個字串,稱為 巨集 被定義為 巨集 的識別符號稱為 巨集名 在編譯預處理時,對程式中所有出現的 巨集名 都用巨集定義中的字串去代換,這稱為 巨集代換 或 巨集展開 巨集定義是由源程式中的巨集定義命令完成的。巨集代換是由預處理程式自動完成的。在 ...