代码之家  ›  专栏  ›  技术社区  ›  zoul

静态常量对数组大小不够好?

  •  2
  • zoul  · 技术社区  · 14 年前
    static const int size = 5;
    @interface Foo { char bar[size]; }
    

    但是编译器抱怨实例变量必须具有常量大小。我真的必须 #define 大小,还是有办法让它在固定常数下工作?(Id希望静态分配内存,不 malloc .)

    2 回复  |  直到 14 年前
        1
  •  3
  •   Eric Towers    14 年前

    您的Objective-C编译器很可能使用C编译器作为后端。C(最高可达C98)只允许常量表达式作为数组大小。这就是编译器所抱怨的。所以不能用标识符作为数组大小。(简而言之,如果预处理器不能计算数字,它就不能工作了。)所以,是的,您将使用一个⋯define。

        2
  •  0
  •   Art Swri    13 年前

    给像我这样的读者注意:记住把parens放在定义中的任何东西上,而不是简单的数值。

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

    出现这个问题的原因是define由预处理器处理,预处理器本质上执行字符串替换。(如果您在web上搜索“将paren放在#define constant”或类似的内容,我相信您会找到显示解释性示例的示例和样式指南。)

    推荐文章