首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言帶參數巨集定義:參數替換規則與括號防錯技巧

     編輯:C 語言基礎

巨集允許帶參數。定義中的參數稱形式參數,調用中的稱實際參數。調用時先替換巨集名,再以實參代換形參。

基本語法

#define 巨集名(形參列表) 字串
巨集名(實參列表);
#define M(y) y*y+3*y
k = M(5); // 展開為 k = 5*5+3*5

範例:較大值巨集

#define MAX(a,b) (a>b) ? a : b
max = MAX(x, y); // 展開為 max = (x>y) ? x : y;

三大關鍵說明

  1. 巨集名與括號間不可有空格:#define MAX (a,b) 會被視為無參巨集,展開錯誤。
  2. 不分配記憶體、無類型:形參不指定類型,實參含具體資料替換。異於函數的值傳遞與作用域隔離。
  3. 括號防錯三層原則:
    • 形參兩側加括號:(y)*(y)
    • 整個運算式外加括號:((y)*(y))
    • 否則 200/SQ(a+1) 展開為 200/(a+1)*(a+1) 運算順序錯誤。

括號缺失導致錯誤演示

#define SQ(y) y*y
sq = SQ(a+1); // 展開 a+1*a+1 → 9+1*9+1=19 (預期 100)

#define SQ(y) (y)*(y)
sq = 200 / SQ(a+1); // 展開 200/(a+1)*(a+1) → 200/10*10=200 (預期 2)

#define SQ(y) ((y)*(y)) // 正確
sq = 200 / SQ(a+1); // 200/((9+1)*(9+1)) = 2
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved