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

C 語言巨集定義:#define 字串替換機制與巢狀應用

     編輯:C 語言基礎

巨集定義以 #define 巨集名 字串 形式,預處理階段將所有巨集名替換為字串,稱「巨集展開」。

基本範例

#define N 100
int sum = 20 + N; // 展開為 20 + 100 → 120

表示運算式

#define M (n*n+3*n)
sum = 3*M+4*M+5*M; // 展開為 3*(n*n+3*n)+4*(n*n+3*n)+5*(n*n+3*n)

運算式兩側括號不可少,否則優先級錯誤。

七大說明重點

  1. 單純字串替換,預處理不檢查錯誤,編譯期才發現。
  2. 非敘述/陳述句,行尾不可加分號(分號會被替換)。
  3. 須寫在函數外,作用域從定義處到檔案結尾,#undef 可終止。
  4. 巨集名若在引號中,不替換(視為字串常數)。
  5. 支援巢狀巨集:#define S PI*y*y 其中 PI 為已定義巨集。
  6. 慣例巨集名全大寫,區別於變數。
  7. 可表示資料類型:#define UINT unsigned int,但與 typedef 有本質差異。

巨集 vs typedef 類型定義差異

#define PIN1 int *
typedef int * PIN2;

PIN1 a, b; // 展開 int *a, b; → a 指標、b 整數
PIN2 a, b; // a、b 皆為 int* 指標

typedef 在編譯期重新命名類型說明符,具類型語意;巨集僅字串替換,易出錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved