在Objective-C中正确声明全局C常量

时间:2013-05-08 18:11:50

标签: ios objective-c arrays global-variables

我正在尝试声明和初始化全局C变量。

const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

当我在头文件中执行此操作时(@interface之前),我收到链接器错误。但是当我在.m文件(@implementation之前)中执行此操作时,事情似乎可以正常工作。

后者是否可以为C / Objective-C声明全局常量?

3 个答案:

答案 0 :(得分:1)

您的全局变量应在头文件中声明如下:

extern const int numberOfTickMarks;
extern const double tickValues[numberOfTickMarks];

没有extern,链接器错误是不可避免的。

在实现文件中,您必须再次定义它们:

const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

答案 1 :(得分:1)

如果我有一个“幻数”,我会做的是#define

#define NUM_TICK_MARKS 6

它可以放在 .m 文件中,但是如果它要广泛共享,我可能会把它放在 .pch 文件中。

顺便说一句

numberOfTickMarks不是必需的:

const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

初始化器非常清楚地说明阵列有多大!

答案 2 :(得分:0)

为什么不在main.m文件中定义它们?

type myVar;

并在标题上声明,使用:

extern type myVar;

修改

根据你在评论中写的内容,我认为你需要使用类变量。由于这个资源在objective-c中不可用,我看到了两个选择:

1)在this SO answer

中使用c ++

2)使用共享实例,如this answer

中所述

就个人而言,我会选择第二名