關於C語言預處理及其相關命令總結

2021-10-08 18:32:38 字數 1816 閱讀 1214

1.標頭檔案的引用:include

2.巨集定義: define

1.#include 「filename」

2.#include < filename >

這兩種引用方式之間的區別就在於,在以< filename> 方式引用的時候,如果在windos環境下採用ide(如:codebloks)進行編譯,那麼會先在系統頭檔案目錄中查詢,若查詢失敗,再到當前目錄中查詢,還查詢不到則報錯;如果在linux 環境下採用 gcc 進行編譯,那麼僅在系統頭檔案目錄中查詢,查詢不到則報錯。

提公升**的可移植性

#define int_size sizeof(int) 

// 因為sizeof(int) 在不同的編譯環境下的執行結果有可能不同

// 所以此種情況下最好使用巨集定義

減少不必要的修改,提公升程式的可預讀性

#define pi 3.1415926

// 如果需要修改pi的值僅需要在此處修改即可

巨集替換不做語法檢查,所以在使用的時候要格外小心,必要的時候可以用const 替代 define

不要在字串中使用巨集,如果巨集名出現在字串中,那麼將按字串進行處理

巨集替換通常在檔案開頭部分,寫在函式的花括號外邊,作用域為其後的程式,直到用 #undef 命令終止巨集定義的作用域

#include

#include

#define pi 3.1415926

intmain()

1.語法:#define 識別符號 字串

1.語法: #define 巨集名(參數列) 表示式

2.注意事項

(1) 巨集名和參數列的括號間不能有空格。

(2) 巨集替換只做替換,不做計算和表示式求解,這一點要格外注意。

#define a 10+20

#define b 50+30

// a * b = 10 + 20 * 50 + 30

#define c (10+20)

#define d (50+30)

// c * d = (10 + 20) * (50 + 30)

(3) 巨集替換在編譯前進行,不分配記憶體。

(4) 巨集替換不存在型別,也沒有型別轉換

(5) 巨集在預處理階段就會被替換

1.在乙個巨集定義中巢狀其他的巨集

2.示例

#define n 55

#define area n*n

1.預處理程式提供了條件編譯的功能,使用者可以選擇性地編譯程式,進而產生不同的目標**檔案

2.定義方式

#if 常量表示式

**1#else

**2#endif

//當常量表示式為真,執行**1,否則執行**2

#ifdef 識別符號

**1#else

**2#endif

// 如果識別符號被#define定義,則執行**1,否則執行**2

#ifndef 識別符號

**1#else

**2#endif

// 如果識別符號未被#define定義,則執行**1,否則執行**2

// 還可以注釋**段

#if (0)

注釋**段;

#endif

應該要注意的問題:常量表示式不能是變數和含有sizeof 等在編譯時求值的操作符,在使用條件編譯命令時尤其要注意。

C語言 預處理命令

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

C語言 預處理命令

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

C語言預處理命令

以 開頭的預處理命令。如 include,巨集定義命令 define pi 3.1415926等。在源程式中這些命令都放在函式之外,而且一般放在原始檔前面,它們稱為預處理部分。無參巨集定義 無參巨集的巨集名後不帶引數。其定義的一般形式為 define 識別符號 字串 其中的 表示這是一條預處理命令,...