使用Objective-C和C
我經常使用的前綴:
typedef enum MyClass_Error {
// never use MyClass_Error_Undefined
// or you may favor MyClass_Error_None for a valid error code
MyClass_Error_Undefined = 0,
MyClass_Error_Empty = 1,
MyClass_Error_NoConnection = 2,
MyClass_Error_WrongUser = 4
// ...
} MyClass_Error;
這些收藏價值。那麼您將獲得類型安全和價值檢查等好處。
非類型常量:
enum { MyClass_ConstantName = 4 };
,並隨時在*.m
隱藏這些祕密的進行。
還注意到C enum
可能在其定義的值中存在差距(與Java不同)。
更新:有一個更好的方法來聲明一個枚舉,如Abizern的答案所示 - 如果你堅持使用最新的工具鏈。使用這種擴展的重要原因是二進制兼容性和編碼(儘管我喜歡用於這些目的的固定寬度類型)。
還有一些其他變化,對於情況下,當你想使用現有的類型:
私人恆
MyClass.m
static const NSRange MyClass_InputRange = {1,1};
衆恆
MyClass.h
extern const NSRange MyClass_InputRange;
MyClass.m
const NSRange MyClass_InputRange = {1,1};
使用C++
你可能會贊成引入一個新的範圍,這些價值觀 - 無論是在一類或名稱空間,而不是使用前綴模擬範圍。其未在標頭前綴使用static
值 常見錯誤
- 爲常量使用
#define
(除非定義是強制性的預處理時)
- 使用短標識符和標識符
- 不是使用
const
時儘可能
- 聲明它們在標題中,當它們可能位於
*.m
源中時。
感謝賈斯汀。你的答案的第一部分就是我正在尋找的東西。更新完全失去了我。在這種情況下,NSRange的使用確實很少見。 – Yahel 2012-08-08 10:11:04
附加問題:你說這是一個常見的錯誤,不使用const.Can我們可以const枚舉? – Yahel 2012-08-08 10:11:53
@Yahel'NSRange'示例對於錯誤代碼不會有用。然而,當你想聲明一個'struct'(不能用'enum'表示)的常量時,這個例子很有用。 – justin 2012-08-08 10:18:05