如何在头文件中正确声明全局变量?

时间:2014-08-18 00:09:25

标签: objective-c global-variables extern

我正在测试一些代码,我在头文件中声明了一个全局变量,但我收到一个链接器错误:“重复符号”

头文件:

//
//  GlobalVaraibleClass.h
//  GlobalVar
//


#import <Foundation/Foundation.h>

int gGlobalVar = 0;
@interface GlobalVaraibleClass : NSObject

@end

类文件:

//
//  GlobalVaraibleClass.m
//  GlobalVar
//

#import "GlobalVaraibleClass.h"

@implementation GlobalVaraibleClass

@end

主:

//
//  main.m
//  GlobalVar
//

#import <Foundation/Foundation.h>
#import "GlobalVaraibleClass.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {

        extern int gGlobalVar;

        NSLog(@"Hello, World! %i", gGlobalVar);

    }
    return 0;
}

我哪里错了?

1 个答案:

答案 0 :(得分:4)

这是向后的,extern进入标题,声明设置值在实现文件中。

extern指定变量将在其他地方声明。如果声明在每次包含标题时都在标题中,则会有另一个声明,并且在链接时会有多个定义不会链接。

示例:

//  GlobalVaraibleClass.h
        extern int gGlobalVar;

//  GlobalVaraible.m
#import "GlobalVaraibleClass.h"
int gGlobalVar = 3;

//  main.m
#import <Foundation/Foundation.h>
#import "GlobalVaraibleClass.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSLog(@"Hello, World! %i", gGlobalVar);

    }
    return 0;
}