11

我很好的典型范例精通常数:声明并初始化在头文件

//.h 
extern const int myInt; 

//.c, .m, .cpp, what have you 
const int myInt = 55; 

但一定是给它放入.h文件与库或其他情况下,您使用的方式无法访问实施文件。

例如,我想一个NSString不断在Xcode项目添加到.h文件像这样:

static NSString *const myString = @"my_string"; 

然而,当我尝试使用myString,我得到的错误

初始化器元件是不是编译时间上myString常数

,表明它没有正确实例化。如何在C++或Objecitve-C头文件中声明编译时常量?

+0

那么这是否意味着C或C++?您可以使用C++中的运行时表达式初始化全局变量,但不能使用C语言。 –

+0

要知道C不可能。将更新标记。 –

回答

17

在C++中,const物体具有内部链接除非明确声明extern,所以没有问题,把一个定义成一个标题文件,例如:

const int myInt = 55; 

利用这个定义与第一声明,myInt可以是用作整数常量表达式,例如数组边界等。

我不能为客观C回答。

+0

这对C++和Objective-C都有效,谢谢! –

+0

@Vorac:这在g ++中起作用(假设你实际正在编译C++源代码)。你的编辑让我浪费时间重新验证一些已经是正确的东西,并使得这个答案在内部不一致。为什么我会说“const对象有内部链接”,然后对这个例子使用一个_explicit_'static'?如果你不确定什么,然后评论;不要编辑。我已经回滚你的编辑。 –