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



我试图声明和初始化全局c变量。

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

当我在头文件中这样做时(在@interface之前),我得到一个链接器错误。但是当我在.m文件中这样做时(在@implementation之前),事情似乎按预期工作。

是后者被接受的方式来声明全局常数为C/Objective-C?

你的全局变量应该像这样在头文件中声明:

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

没有extern,连接错误不可避免。

在实现文件中,您必须像这样重新定义它们:
const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

如果我有一个"幻数"是#define,我会怎么做:

#define NUM_TICK_MARKS 6

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

顺便说一下:

numberOfTickMarks是不必要的:

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

初始化式很清楚地说明了数组有多大!

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

type myVar;

在头文件中声明,使用:

extern type myVar;

编辑

根据你在注释上写的,我认为你需要使用类变量。由于该资源在objective-c中不可用,我看到了两个替代方案:

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

2)使用共享实例,如答案

所述

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

相关内容

  • 没有找到相关文章

最新更新