static extern const 静态全局变量与全局变量的区别

来源:互联网 发布:有赞源码下载 编辑:程序博客网 时间:2024/06/05 19:38

static:和extern是用来设置作用域的
const:设置变量只可以被读,不可以被修改

static:

用static修饰的变量,在其所限定的作用域中只会有一分内存

1:在一个函数内部:说明是一个静态局部变量,

不管这个函数被调用多少次,这个static修饰的变量只会有一分内存,也就是说当这个变量多次被修改,都是在上一次基础上修改,不会从头再来

2:在一个文件内部,函数外部:静态全局变量

该文件中的函数都可以访问到,并且不同函数在对该变量修改时都是在上一个函数修改的基础上修改的

静态全局变量和非静态全局变量的区别

static 限制了变量的作用域只在该文件里,所以加上static在别的文件中国定义一个相同的static没有问题
没有static修饰的全局变量,要是在不同文件中定义了相同的变量名,程序会报错

extern:外部变量

用extern修饰的变量,可以被其他类所访问,凡是引用了extern所修饰的变量的头文件,那么就可以使用该变量。

但是要注意因为static修饰的不在全局符号表中,所以不用区分变量名extern修士的在全局符号表里面,所以要区分。

const:一个变量用const修饰,说明该变量不可以被修改

混搭

1:static和const

static NSString *const indentifier = @"hello";

相当于一个文件中的宏定义

2:extern和const

在.h文件中

extern NSString *const hello;

在.m文件中赋值

NSString *const hello = @"world";

可以用于发送通知,这样就不用知道name,只需要使用这个变量就可以了

补充

在iOS开发中的一种编程技巧:多用类型常量,少用#define预处理命令

static限制了变量的作用域,但是#define没有,如果我们仅仅想在一个文件内部使用一个常量,而不影响其他的文件的宏,如果用define,那么所有导入了该文件的那些文件中要是有一个相同的变量,那么这些变量都会被替换
static 形式的常量定义,可以知道其类型,代码可读性好
const的修饰使得该变量在修改会保存,确保其不会被修改,但是#define却不会,值可能会被修改

0 0
原创粉丝点击