4 多用型別常量,少用 define預處理命令

2021-09-01 06:24:59 字數 1143 閱讀 9684

#define animation_duration 0.3

缺點:1)這樣定義沒有型別資訊,使閱讀**的人難以理解其意圖。

2)假設此指令宣告在了某個標頭檔案中,那麼所有引入這個標頭檔案的**,其animation_duration都會背替換為0.3。

更好的定義方式:

static const nstimeinterval kanimationduration = 0.3;

優點:1)包含型別資訊nstimeinterval,更清楚的描述了常量的含義。

2)避免了常量命名發生衝突。

注意:1)常量的定義不應該出現在標頭檔案中,放在標頭檔案等於宣告了乙個名叫kanimationduration的全域性變數,如果要放在標頭檔案中也應該以類名為字首命名。

3)使用static來宣告,static修飾的變數具有檔案作用域,防止其他檔案宣告了同名的變數導致編譯器丟擲錯誤資訊。

對外公開某個常量的定義方式

//in the header file

extern nsstring * const stringconstant;

//in the implementation file

nsstring * const stringconstant = @"value";

使用const修飾指標常量是因為我們不希望有人改變此指標常量指向另乙個nsstring物件,使用extern宣告是告訴編譯器,在全域性符號表中有乙個名字叫stringconstant的符號,也就是說編譯器無需檢視其定義,即允許**使用此常量,但需要注意命名以防止衝突,通常以類名為字首。

對比預處理指令優點:編譯器會確保常量的值不變,一旦在實現檔案中定義好,即可隨處使用。而採取預處理指令所定義的常量可能會無意中遭人修改,從而導致應用程式各個部分所使用的值不同。

總結:1)不要用預處理指令定義常量,這樣定義出來的常量不含型別資訊,編譯器只是會在編譯前據此執行查詢與替換操作。即使有人重新定義了常量的值,編譯器也不會產生警告資訊,這將導致應用程式中的常量值不一致。

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

3)在標頭檔案中使用extern來宣告全域性常量,並在相關實現檔案中定義其值。這種常量要出現在全域性符號表中,所以其名稱應加以區隔,通常用與之相關的類名做字首。

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

如何使用 只在乙個檔案中使用 static const nstimeinterval kanimaltime 0.3 多個類中使用,全域性 extern nstimeinterval const kanimaltime in the header file const nstimeinterval ...

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

預處理指令,預處理指令把原始碼中animation defation替換為0.3 define animation defation 0.3 不推薦 推薦 定義常量的方法 static const nstimeinterval kanimationduration 0.3 變數一定要同時用stati...

快速學習 4 資料型別 變數 常量

在這裡,我們不講很高深的東西,完全最基礎的來 什麼是資料型別,首先知道什麼資料,數字1235,文字 提莫隊長的部落格 都是資料 還有其他的 資料很多很多 但是怎麼表示 數字型別的 123 465798 132 這裡使用 int float double long 等表示,你問為什麼乙個數字 要用到很...