文档章节

第02天实战技术(10):static和extern使用

宇鸿165
 宇鸿165
发布于 2017/03/26 21:56
字数 822
阅读 7
收藏 0

#####一、static和extern使用

    (静态)static : 1. 用于修饰局部变量, 被static修饰局部变量,延长生命周期,跟整个应用程序有关
              * 被static修饰局部变量, 只会分配一次内存
              * 被static修饰局部变量 什么时候分配内存? 程序一运行就会给static修饰变量分配内存
 
             2. 修饰全局变量,被static修饰全局变量,作用域会修改,只能在当前文件下使用
 
    (外界)extern : 声明外部全局变量, 注意 : 只能用于声明 不能用于定义
    extern工作原理: 先会去当前文件下 查找有没有对应全局变量,如果没有,才会去其他文件查找
    
    // 错误写法
    extern int a = 3; // 'extern' varialbe cannot have an initiallzer (extern 不能初始化)
  • 1.static修饰的局部变量
被static修饰局部变量,延长生命周期,跟整个应用程序有关
* 被static修饰局部变量, 只会分配一次内存
* 被static修饰局部变量 什么时候分配内存? 程序一运行就会给static修饰变量分配内存
>>>
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //static修饰局部变量,延长生命周期,跟整个应用程序有关, 只会分配一次内存
    static int i = 0;
    i++;
    NSLog(@"%d",i);
}

  • 2.static修饰的全局变量
修饰全局变量,被static修饰全局变量,作用域会修改,只能在当前文件下使用

>>>
#import "ViewController.h"
static int i = 0; //static的全局变量  只能在当前文件下使用
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    i++;
    NSLog(@"%d",i);
}
@end
  • 3.extern : 声明外部全局变量, 注意 : 只能用于声明 不能用于定义
extern工作原理: 先会去当前文件下 查找有没有对应全局变量,如果没有,才会去其他文件查找
  • 3.1通过使用extern来声明 已经存在的全局变量
>>>状态1:
code
ViewController

#import "ViewController.h"
int i = 10; // 全局变量 所有文件都可以使用 内存也是一运行就分配了
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //static修饰局部变量,延长生命周期,跟整个应用程序有关, 只会分配一次内存
    // static int i = 0;
    i++;
    NSLog(@"%d",i);
}
@end

---
#import "AppDelegate.h"
@interface AppDelegate ()
@end

@implementation AppDelegate
extern int i; // 用来声明
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%s -- %d",__func__, i);    
    return YES;
}
@end
  • 3.2通过使用extern来声明 不存在的全局变量(系统会直接报错)
>>>状态2:

#import "ViewController.h"
static int i = 0; //static的全局变量  只能在当前文件下使用
@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    i++;
    NSLog(@"%d",i);
}


@end

---

#import "AppDelegate.h"
@interface AppDelegate ()
@end

@implementation AppDelegate
extern int i; // 用来声明
/**
 如果没有定义 
 使用extern int i; 来声明
 会报错,说没有定义 i这个变量
 
 Undefined symbols for architecture x86_64:
 "_i", referenced from:
 -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see invocation)
 */

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%s -- %d",__func__, i);    
    return YES;
}
@end

---
错误信息
Undefined symbols for architecture x86_64:
  "_i", referenced from:
      -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

11_1使用static声明的全局变量_其他文件使用extern进行声明会报错.png

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
const、static、内部链接属性和外部链接属性整理

c语言中,多个文件组合的时候,有可能标示名相同,那么这个时候编译器如何判别的呢? c语言中有3种链接属性: 外部(external), 内部(internal),无设置(none) 外部(external): 使用exter...

天王盖地虎626
04/05
1
0
C语言基础-12-static和extern关键字2-对变量的作用

上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问;extern用来定义和声明一个外部函数,允许其他文件访问。static和extern对变量也有作用,不过跟函...

Corwien
2016/03/16
29
0
二十、static和extern关键字2-对变量的作用

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 上一讲介绍了stati...

长平狐
2013/03/28
801
0
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
C++ 内存模型和名称空间

一、存储的连续性 连续性:通俗来说,就是关于变量的创建与取消的管理方式,有的是自动创建自动释放,有的需要手动处理,有的变量产生后在程序运行时一直存在等。。。 数据的存储有不同的特征...

CWY_007
2017/04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.7K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
4
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部