在头文件中声明和初始化常量

15

我熟悉典型的范式:

//.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++或Objective-C头文件中声明编译时常量?


1
这是要用C还是C++?在C++中,您可以使用运行时表达式初始化全局变量,但在C中不行。 - Mike Seymour
很高兴知道这对于C来说是不可能的。将更新标签。 - Patrick Perini
1个回答

19

在C++中,const对象如果没有明确声明为extern,则具有内部链接,因此将定义放入头文件中没有问题,例如:

const int myInt = 55;

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

我无法回答Objective C的问题。


@Vorac:这在g++中确实有效(假设您正在编译C++源代码)。您的编辑导致我浪费时间重新验证已经正确的内容,并使得此答案内部不一致。如果我说“const对象具有内部链接”,那么为什么要在示例中添加一个显式的static?如果您对某些内容不确定,请发表评论;不要编辑。我已经回滚了您的编辑。 - CB Bailey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接