2

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

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

当我在头文件中(在 之前@interface)执行此操作时,出现链接器错误。但是当我在.m文件中(之前@implementation)执行此操作时,事情似乎按预期工作。

后者是为 C/Objective-C 声明全局常量的公认方式吗?

4

3 回答 3

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};
于 2013-05-08T18:14:49.447 回答
1

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

#define NUM_TICK_MARKS 6

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

顺便说一句

numberOfTickMarks不是必需的:

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

初始化器非常清楚地说明了数组有多大!

于 2013-05-08T18:22:14.307 回答
0

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

type myVar;

并在标题上声明,使用:

extern type myVar;

编辑

根据您在评论中写的内容,我认为您需要使用类变量。由于此资源在 Objective-c 中不可用,因此我看到了 2 个替代方案:

1)在这个SO答案中使用c ++

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

就个人而言,我会选择2号

于 2013-05-08T18:14:38.927 回答