static const int size = 5;
@interface Foo { char bar[size]; }
但是编译器抱怨“实例变量必须具有恒定大小”。我真的需要#define
这个大小,还是有办法让它与常规常量一起工作? (我希望静态分配内存,不要malloc
。)
答案 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常量'或类似的地方'我相信你会找到显示解释性示例的示例和样式指南。)