使用 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;
对于这些价值集合。然后您将获得诸如类型安全和switch
值检查之类的好处。
对于非类型常量:
enum { MyClass_ConstantName = 4 };
并随时将这些隐藏在*.m
私有时。
另请注意,Cenum
可能在其定义的值中有间隙(与 Java 不同)。
更新:有一种更好的方法来声明一个枚举,如 Abizern 的回答所示——如果你坚持使用最新的工具链。使用此扩展的主要原因是为了二进制兼容性和编码(尽管出于这些目的我更喜欢固定宽度类型)。
对于要使用现有类型的情况,还有一些其他变体:
私有常量
我的班级.m
static const NSRange MyClass_InputRange = {1,1};
公共常量
我的类.h
extern const NSRange MyClass_InputRange;
我的班级.m
const NSRange MyClass_InputRange = {1,1};
使用 C++
您可能倾向于为这些值引入一个新的范围——在类或命名空间中,而不是使用前缀来模拟范围。
常见错误
- 使用
#define
for 常量(除非在预处理时必须定义)
- 使用短标识符和没有前缀的标识符
static
在标题中使用值
const
尽可能不使用
- 当它们可以在
*.m
源中时,在标题中声明它们。