static 和extern的区别
2018-07-23 本文已影响23人
十年祤茉
extern
- extern置于变量或者函数前,作用域是整个工程,表示变量或者函数的定义在别的文件中,通过在变量前添加extern来访问这个全局变量,
- extern修饰的变量没有真正的内存
#import "Person.h"
@implementation Person
int age = 10;
@end
在main.m文件中,不需要引入Person类的头文件
int main(int argc, char * argv[]) {
@autoreleasepool {
extern int age; // 只要你在全局变量前加extern,你的这个文件就可以访问这个全局变量
NSLog(@"age1=%d",age); // age1 = 10
age = 20; // 通过这种方法修改age值
NSLog(@"age2=%d",age); // age2 = 20
}
return 0;
}
static
- 只要在全局变量前加static,那么这个全局变量的作用域就会缩小到当前文件,外界就不能访问了。
#import "Person.h"
@implementation Person
static int grade = 10;
@end
在main.m文件中,不引入Person类的头文件
int main(int argc, char * argv[]) {
@autoreleasepool {
extern int grade;
NSLog(@"grade=%d",grade);
}
return 0;
}
编译器直接报错,
_grade在main中未定义
- static让局部变量只初始化一次,不改变局部变量的作用域,仅仅改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)