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

Objective-C 學習筆記:#define 預處理器指令詳解

     編輯:關於C

#define 簡介

C/Objective-C 預處理指令,編譯前進行文本替換,提升代碼可讀性與靈活性。

一、常量定義


#define NAME "abc"

int main() {
    NSString *str = [[NSString alloc] initWithCString:NAME];
    NSLog(@"%@", str);  // 輸出 abc
}
  • 格式:#define 常量名 常量值,以空格分隔,行尾無分號。
  • 定義後不可修改,慣例大寫,置於 #import 之後。

二、多常量關聯


#define A 2
#define B A*2  // 可引用其他 #define
// B 展開為 2*2

三、帶參數宏(函數式宏)


#define FUNC(x,y) ((x) * (y))
#define MYFUN(x) (x * 5)

int main() {
    int v = FUNC(5, 5);   // 25
    int x = MYFUN(5);     // 25
}
  • 參數加括號 (x) 防止運算符優先級問題。
  • 整個表達式加括號 ((x)*(y)) 保護上下文。
  • 無函數調用開銷,但無類型檢查、難調試、副作用風險(如 MYFUN(i++))。

四、#define vs typedef

五、條件編譯輔助


#ifdef DEBUG
    #define LOG(fmt, ...) NSLog(fmt, ##__VA_ARGS__)
#else
    #define LOG(fmt, ...)
#endif

總結

  • #define 適合常量、條件編譯、簡單宏。
  • 複雜類型別名、函數指標、需類型安全場合優先用 typedef。
  • 宏參數務必加括號,避免副作用,不濫用複雜邏輯宏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性#definetypedef
類型檢查無(文本替換)有(編譯器處理)
作用域文件級(無作用域)遵循塊作用域
條件編譯支援 #ifdef/#ifndef/#undef不支援
指標聲明一致性失效(見上文陷阱 3)保證一致
調試可見性符號丟失符號保留