静态const int对数组大小不够好?

时间:2010-10-21 13:48:26

标签: objective-c arrays

static const int size = 5;
@interface Foo { char bar[size]; }

但是编译器抱怨“实例变量必须具有恒定大小”。我真的需要#define这个大小,还是有办法让它与常规常量一起工作? (我希望静态分配内存,不要malloc。)

2 个答案:

答案 0 :(得分:3)

您的Objective-C编译器可能使用C编译器作为后端。 C(最高为C98)仅允许常量表达式作为数组大小。这是你的编译器抱怨的。因此,您不能将标识符用作数组大小。 (简而言之,如果预处理器无法计算数字,那么它就无法工作。)所以,是的,你将会使用#define。

答案 1 :(得分:0)

请像我这样的读者注意:记住在#define中的任何地方放置一个parens超出一个简单的数值。

#define SMALL_ONE     10
#define BIG_ONE       SMALL_ONE + 10  /* can cause problems */
#define BETTER_BIG    (SMALL_ONE + 10) /* recommended */

问题出现是因为#define由预处理器处理,它实际上是一个字符串替换。 (如果您在网上搜索'将parens放在#define常量'或类似的地方'我相信你会找到显示解释性示例的示例和样式指南。)