当我运行一些使用 extern 关键字来引用实现文件中的静态变量的代码时,我看到了一些奇怪的东西。所以我在我的实现文件中声明了静态变量 gCounter 并在同一个实现文件的两个方法中引用它(因为它是静态的)。但是,当我在方法中使用 extern 关键字时,会得到不同的结果。我的理解(通过阅读我的书)是,当您引用与方法在同一文件中声明的静态变量时,不需要 extern 。代码如下:
/** 界面 **/
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
+(Fraction *) allocF;
+(int) count;
@end
/**implementation**/
#import "Fraction.h"
static int gCounter;
@implementation Fraction
+(Fraction *) allocF
{
extern int gCounter;
++gCounter;
return [Fraction alloc];
}
+(int)count
{
extern int gCounter;
return gCounter;
}
@end
/**main**/
#import "Fraction.h"
int main (int argc, const char * argv[])
{
@autoreleasepool
{
Fraction *a, *b, *c;
NSLog(@"The number of fractions allocated: %i", [Fraction count]);
a = [[Fraction allocF] init];
b = [[Fraction allocF] init];
c = [[Fraction allocF] init];
NSLog(@"The number of fractions allocated: %i", [Fraction count]);
}
return(0);
}
当我在我的方法中使用 extern 关键字时,代码可以正常工作并导致打印整数 3。但是,当我删除 extern 时,会打印整数 2。这是为什么?由于 gCounter 是一个静态变量,如果没有 extern 关键字,这不应该工作吗?