extern ios 中 使用
2014-01-03 17:11:00 weixin_34380296 阅读数 1

Easiest way:

// Prefs.h#define PREFS_MY_CONSTANT @"prefs_my_constant"

Better way:

// Prefs.hexternNSString*const PREFS_MY_CONSTANT;// Prefs.mNSString*const PREFS_MY_CONSTANT =@"prefs_my_constant";



http://stackoverflow.com/questions/538996/constants-in-objective-c

转载于:https://www.cnblogs.com/cocoajin/p/3504026.html

2014-01-03 17:11:00 weixin_33795833 阅读数 3

Easiest way:

// Prefs.h#define PREFS_MY_CONSTANT @"prefs_my_constant"

Better way:

// Prefs.hexternNSString*const PREFS_MY_CONSTANT;// Prefs.mNSString*const PREFS_MY_CONSTANT =@"prefs_my_constant";



http://stackoverflow.com/questions/538996/constants-in-objective-c

转载于:https://www.cnblogs.com/cocoajin/p/3504026.html

2019-01-18 11:33:00 weixin_33905756 阅读数 22

先上代码:

static int var1 = 10;
void staticTest(void);
void countMethod(void);

int main() {
    @autoreleasepool {
        staticTest();
    }
}

void staticTest(void) {
    countMethod();
    countMethod();
    
    extern int var1;
    printf("%d\n",var1);
    printf("%p\n",&var1);
}

void countMethod(void) {
    static int var1 = 0;
    var1++;
    printf("%d\n",var1);
    printf("%p\n",&var1);
}

输出结果:

1
0x102dce3c0
2
0x102dce3c0
10
0x102dce190

一、extern的作用

extern:引入全局变量,本文件中没有就从整个项目中引入,如果整个程序中都不存在,编译阶段将会报错。
重点:引入的是全局变量,而不是全局区的变量。全局区包括全局变量和静态变量。
例子:
代码中注释掉本段:

//static int var1 = 10;

运行以上代码将会报错:


4044896-342452bcfaba3d21.png
extern

原因:
extern引入的是全局变量,而不是全局区的局部静态变量。

二、static修饰局部变量

static修饰局部变量的几个功能:
1.改变局部变量的生命周期,将局部变量从栈中存储到全局区,生命周期从函数/代码块执行完成后销毁延长到了:程序的开始到结束
2.不改变局部变量的作用域。
例子:
运行以上代码,前两次打印:

1
0x102dce3c0
2
0x102dce3c0

原因:
var1没有被销毁,存在整个程序的生命周期中。

三、static修饰全局变量

static修饰全局变量的几个功能:
1.不改变声明周期,全局变量的生命周期仍然是整个程序开始到结束;
2.改变了全局变量的作用域,由项目中任意文件都可以使用缩减成了只有在本文件中可以使用;
例子:
运行以上代码,最后一次打印:

10
0x102dce190

原因:
1.证明了两个var1虽然都是存储在全局区,但是却不是同一块内存,也就是说不是同一个变量;
2.extern引入的是全局变量,所以最后会打印10;

2014-01-03 17:11:00 weixin_34415923 阅读数 9

Easiest way:

// Prefs.h#define PREFS_MY_CONSTANT @"prefs_my_constant"

Better way:

// Prefs.hexternNSString*const PREFS_MY_CONSTANT;// Prefs.mNSString*const PREFS_MY_CONSTANT =@"prefs_my_constant";



http://stackoverflow.com/questions/538996/constants-in-objective-c
2016-07-23 15:37:00 weixin_33807284 阅读数 1

static作用:

1、修饰局部变量:

  • 延长局部变量的生命周期,程序结束才会销毁。

  • 局部变量只会生成一份内存,只会初始化一次。

  • 改变局部变量的作用域。

如:

- (void)test
{
    // static修饰局部变量
    static int age = 0;
    age++;
    NSLog(@"%d",age);
}

如果连续调用两次test,会发现age打印结果如下图所示,age值初始化了一次,并且声明周期被延长了。

153351_KZRz_2279344.png

 

2、修饰全局变量 

  • 只能在本文件中访问,修改全局变量的作用域,生命周期不会改

  • 避免重复定义全局变量

extern作用:

只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量

extern工作原理:

先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。

例如我们在该文件定义了一个全局变量:

// static修饰全局变量
static int age = 20;

我们使用它时,需要用extern int age; 打印结果如下,它会自动为我们寻找全局变量age,而非test中的age。

153607_BMOD_2279344.png

转载于:https://my.oschina.net/Misayalvyuan/blog/716658

没有更多推荐了,返回首页