使用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