全局常量文件中的 Objective-C typedef 枚举

标签 objective-c constants precompiled-headers

好的,这与问题 "Constants in Objective C" 有关.

我创建了 Constants.h 及其对应的 Constants.m 文件:

// Constants.h
extern int const BOOKS; 
typedef enum SSDifficultyLevel {
    EASY = 0,
    MEDIUM = 1,
    HARD = 2
} SSDifficultyLevel;

// Constants.m
int const BOOKS = 66;

我的问题:enum 是否可以在 Constants.h 中被typedef?代码编译正常(到目前为止没有警告或错误)但我想知道这是否是正确的方法,因为相关问题中提供的解决方案涉及拆分常量的定义和声明。

谢谢。

最佳答案

好吧,常量和枚举有不同的用途(尽管有一些明显的重叠)。所以,不要偏离人们的预期太远,除非您有充分的理由打破该规则。

就我个人而言,我不太喜欢“全局常量 header ”,因为您通常应该将这些声明与它们的用途相关联。例如,Apple 的框架通常在它们相关的接口(interface)附近声明枚举,并在与类相同的 header 中声明通知名称。

除此之外,你已经正确地声明了一些东西。

如果您使用 c++ 或 objc++,那么您将需要修复 extern,因为名称可能不同,这可能会导致链接错误。

像这样的东西应该可以解决问题:

#if defined(__cplusplus)
#define MONExternC extern "C"
#else
#define MONExternC extern
#endif

然后你可以像这样声明BOOKS:

MONExternC int const BOOKS; 

另一个注意事项,这可能只是为了在您的示例中进行说明:这些标识符非常短,很容易与其他标识符发生冲突。

关于全局常量文件中的 Objective-C typedef 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912222/

相关文章:

ios - UINavigationBar 标题 View 对齐问题

无法使用我认为应该是编译时常量的内容来初始化静态数组

c# - 存储大量静态字符串的最高效方式

c++ - 遵循函数/方法签名的 const 是什么意思?

c++ - 预编译头文件?我们真的需要它们吗

objective-c - 如何更改 NSOutlineView 中节点的样式?

IOS/objective-C : Find Index of word in String

objective-c - 如何拦截 Objective-C 代码中 plist 值的读取?

c++ - msvc预编译头警告抑制

c++ - 如何使预编译头在 Netbeans 上工作?