我正在尝试声明和初始化全局C变量。
const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};
当我在头文件中执行此操作时(@interface
之前),我收到链接器错误。但是当我在.m
文件(@implementation
之前)中执行此操作时,事情似乎可以正常工作。
后者是否可以为C / Objective-C声明全局常量?
答案 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中不可用,我看到了两个选择:
中使用c ++2)使用共享实例,如this answer
中所述就个人而言,我会选择第二名