
extern
extern
存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern
时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern
来得到已定义的变量或函数的引用。
简而言之:用来获取全局变量(包括全局静态变量)的值,不能用于定义变量
查看以下代码
#import "ViewController.h"
//声明全局变量
NSString *flag = @"ben";
@interface ViewController ()
@end
@implementation ViewController
//c函数
void text(){
printf("text");
}
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
extern void text(void);
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
extern NSString *flag;
NSLog(@"%@",flag);
//_______________________
注意这里修改了 flag
flag = @"1234";
NSLog(@"%@",flag);
//_______________________
text();
return YES;
}
打印
2018-08-24 11:28:30.902208+0800 22222[71344:2788123] ben
2018-08-24 11:28:30.902323+0800 22222[71344:2788123] 1234
text
问题:只需要extern就能得到并修改其他文件的变量,这样变量会不安全,因为会被修改。
继续看下文
static
static
存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static
修饰局部变量可以在函数调用之间保持局部变量的值(这个不多做介绍了)。
static 是全局变量的默认存储类
当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
在上述代码中修改
//声明全局变量
static NSString *flag = @"ben";
再运行项目发现报错

这时再读一下static介绍应该会有些想法
END.....
网友评论