static 和extern的区别

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修饰的局部变量
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容