extern的使用 ios
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_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

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-05-06 23:39:00 weixin_30800987 阅读数 2

前言

将编程语言按照程序的应用分两种,Complier LanguageInterpreted Language

Objective-C和C++都是编译语言,编译语言在执行之前,必须通过编译器生成机器码,然后在CPU上直接执行,执行效率高。

Objective-C采用Clang前段,LLVM(Low level vritual machine)作为编译器后段,步骤:
Clang -> LLVM Optimizer -> LLVM Code Generator

Clang: 语法分析,语义分析,生成中间代码(intermediate representation)。在这个过程中进行类型检查,如果发现错误或者警告会标注哪一行。
LVVM(Optimizer,Generator): BitCode生成,链接期优化/针对不同框架,生成不同机器码。

iOS程序中多个源文件,每个源文件在编译后期会对应一个.obj文件,这些目标文件之间就可能有关联,然后链接在一起生成可执行文件。

1.extern定义变量(e.g. NSString *)###
声明一个已经定义过的变量,多个源文件可以共同使用同一个变量(static相反)。

.h:
extern NSString * const kEXTERNTAGSTRING;
.m:
NSString * const kEXTERNTAGSTRING = @"externTagString";

2.extern定义外部函数

  • 外部函数:当前文件定义的函数允许其他文件访问,不可以有重名的外部函数;
  • 内部函数:当前文件定义的函数只能允许内部使用,可以重名;

参考

1.iOS编译过程

iOS 编译

转载于:https://www.cnblogs.com/R0SS/p/5467491.html

iOS extern使用教程

阅读数 199

iOS之extern关键字

阅读数 987

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