编译器是否在全局符号表中包含没有静态修饰符的全局变量?

时间:2015-06-14 18:33:15

标签: c++ ios objective-c compilation objective-c++

我已经读过(Effective Objective-C 2.0),在实现文件(m.file)中声明的static变量是定义它们的转换单元的本地变量,这些变量不是暴露在 全球符号表。但是如果在没有static的情况下声明.m文件中的全局变量,它就像static一样。那么在这种情况下隐含使用static还是这些是不同的事情?

示例:

//in the m.file

static int staticVariable;//100% static
int globalVariable;//is static ?
@implementation SomeClass {
//local ivars declaration
}

1 个答案:

答案 0 :(得分:1)

放置变量取决于编译器。

只要遵守范围规则,就允许编译器将文件静态变量放入全局变量段。实际上,只要遵守“as-if”规则,编译器就可以将变量放在读写内存中的任何位置。

在文件范围定义变量时,使用static与否的区别在于static隐藏了其他翻译单元的变量。否则他们会受到同样的待遇。

注意:这适用于C ++,因为OP具有C ++标记。我不知道这是否也适用于Objective C,因为那是另一种语言。

相关问题