C語言中巨集定義的問題

2021-09-09 05:38:27 字數 656 閱讀 2832

巨集定義的基本用法是「替換」。

例如:#define max 10

int a[max];

c編輯器對巨集在預處理(預編譯)時展開,即替換;把a[max]中的max 替換為 10。

c預處理器是對巨集不做任何語法上的檢測,即「換」;那麼這個「換」有時候就存在乙個運算優先順序的問題。

例如:

#include #define n 3

#define power(m) n*m*m

int main(void)

很多人的答案算出來是:27,27

寫出這種答案的同學的計算思路是這樣子的:巨集展開後 3 * 3 *3 = 27。

但在這裡並不是這樣展開,採用上面的展開方法的原因在於沒注意巨集展開後的優先順序問題,下面看正確的展開思路。

3 * 1 + 2 * 1 + 2 = 7

3 * 2 + 1 * 2 + 1 = 9

結果是:7,9

如果上面的巨集定義是這樣定義的: #define power(m) n*(m)*(m)

那麼對巨集展開後是:

3 *(1 + 2) * (1 + 2) = 27

3 * ( 2 + 1) * (2 + 1) = 27

巨集本身的用法是「換」,在換的過程中要注意運算優先順序的問題。

c 語言中的巨集定義

巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...

C語言中的巨集定義

下列c 中包含兩種巨集定義,例如 include define max connection 1000 define mng port 5000 define min a,b a b a b define max a,b a b a b int main 方法1 gcc e 引數預編譯 gcc e ...

C語言中的巨集定義

c語言中的巨集定義 c語言中的巨集定義也叫做預處理命令,預處理命令是c語言本身的組成部分,不能直接對它們進行編譯。1.基本概念 1 預處理不是c語句,是在編譯前進行的 2 預處理功能主要用於下3種情況 巨集定義 檔案包含 條件編譯 3 巨集是在編譯前進行的,程式不能直接對它們進行編譯,由預處理程式先...