我试图声明和初始化全局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)使用共享实例,如答案
所述就我个人而言,我会选择第二个