2010-05-14 49 views
9

我在其他地方见过给像这样枚举的默认值:的Objective-C/C给枚举的默认值

typedef enum { 
MarketNavigationTypeNone = 0, 
MarketNavigationTypeHeirachy = 1, 
MarketNavigationTypeMarket = 2 
} MarketNavigationLevelType; 

..但我不记得这样做的价值。如果我不给他们默认值 - 然后有人在重新排序枚举 - 有什么风险?

如果我总是使用枚举名称,甚至不用它们的整数值引用它们,是否有任何风险?

我能想到的唯一可能的问题是,如果我初始化一个来自数据库的int值的枚举 - 并且枚举被重新排序 - 那么应用程序将会中断。

回答

2

一般而言,只有当枚举暴露于某种外部API或将用于通过数据文件或其他方式交换数据时,这才是重要的。如果枚举仅在您的应用程序中使用,而在其他地方则无效,那么实际值并不重要。

7

这不是默认值,你给他们他们将永远有的价值。

如果您不显式初始化它们,则第一个枚举值为零。对于所有其他人,如果没有初始化程序,它们的值是前一个枚举程序的值增加1。

有两个原因给他们明确的值:

  • 你不希望他们有价值观,他们不得不想弄清楚他们有什么样的价值(否则
  • 您或其他开发人员)

如果您始终用它们的名称引用它们并且从不显式使用整数值进行比较或赋值,则不需要明确给它们赋值。

+0

“默认值” - 是的,我知道他们是不变的 - 我只是用了错误的名词。 你没有提到在应用程序之外存储枚举的事实,然后重新初始化它们? – bandejapaisa 2010-06-28 15:38:22

+0

@ban:如果外部接口不使用具有等效定义的枚举,则会明确地为它们分配一些整数值。 – 2010-06-28 17:11:58