美文网首页知识点
static 和extern的区别

static 和extern的区别

作者: 十年祤茉 | 来源:发表于2018-07-23 17:31 被阅读23次

extern

    1. extern置于变量或者函数前,作用域是整个工程,表示变量或者函数的定义在别的文件中,通过在变量前添加extern来访问这个全局变量,
    1. 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

    1. 只要在全局变量前加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中未定义
    1. static让局部变量只初始化一次,不改变局部变量的作用域,仅仅改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
用static修饰的局部变量 没有用static修饰的局部变量

相关文章

网友评论

    本文标题:static 和extern的区别

    本文链接:https://www.haomeiwen.com/subject/rbujmftx.html