04@多用型別常量,少用#define預處理指令

Zack_Go發表於2019-01-05

#define預處理

  • 不要用預處理指令定義常量。這樣定義出來的常量不含型別資訊,編譯器只是會在編譯前據此執行查詢與替換操作。即使有人重新定義了常量值,編譯器也不會產生警告資訊,這將導致應用程式中的常量值不一致。
// 預處理指令,預處理指令把原始碼中ANIMATION_DEFATION替換為0.3
#define ANIMATION_DEFATION 0.3 // 不推薦

// 推薦 定義常量的方法
static const NSTimeInterval kAnimationDuration = 0.3;
// 變數一定要同時用static 和const來宣告。
//試圖修改const修飾符鎖宣告的變數,那麼編譯器會報錯。
//static修飾符意味著該變數僅在此變數的編譯單元內可見。

複製程式碼

static const定義單元內可見的常量

  • 在實現檔案中使用static const來定義“只在編譯單元內可見的常量”。由於此類常量不在全域性符號表中,所以無需為其名稱加字首。

| 注意:若常量在實現檔案內,在前字母加k。若在類之外可見,常加類名為字首。

使用extern來宣告全域性變數

  • 在標頭檔案中使用extern來宣告全域性變數,並在相關實現檔案中定義其值。這種常量要出現在全域性符號表中,所以其名稱應加以區隔,通常用與之相關的類名做字首。
// In the header file
extern NSString *const EOCStringConstant;

// In the implementation file
NSString *const EOCStringConstant = @"VALUE";
複製程式碼

相關文章