const 宏 static extern

IOS 基础-define、const、extern、全局变量

const 与 宏的区别 :

C语言宏高级用法 [总结]

【C基础】#define宏定义中的#,##,@#,\ 这些符号的神奇用法

> 常用 字符串/常见基本变量 使用定义宏

> 苹果一直推荐我们使用const,而不是宏 ;swift废弃使用宏

1. 编译时刻不同宏:预编译  const: 编译

2. 编译检查宏: 没有编译检查   const:有编译检查

3. 宏的好处: 定义函数/方法,const不可以(swift实现的话,定义全局函数)

4. 宏的坏处: 大量使用宏,会导致预编译时间过长

const 宏 static extern_第1张图片
静态变量
const 宏 static extern_第2张图片
静态常量
const 宏 static extern_第3张图片
全局变量


blog: 大量使用宏,会导致内存暴增(验证后是谣言)

const 作用: 1.修饰右边基本变量或者指针变量eg:int a   int*p

                    2. 被const 修饰的变量是不可变的,只读(可以防止被改动)

两种写法:

const int a = 3;

int const a = 3;

int a = 3;

int const *p = &a;

*p =8;(错误 因为const修饰后,p值不能修改,它会指向a的值)

static:

1. <1>让局部变量只初始化一次

   <2>局部变量在程序中只有一份内存

   <3>并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)

2. static修饰全局变量,全局变量的作用域仅限于当前文件.保证全局变量安全,外界不可访问与修改.

例子:

static NSString*const name =@"kris";//表示这个全局变量只可以在本类中使用,并且值不能修改

extern:

<1>要想访问全局变量可以在前面加extern

<2>extern修饰的变量没有真正内存

1. 声明一个外部全局变量,注意extern只能用于声明,不能用于定义

2. 工作原理: 先会在当前文件下查找有没有对应全局变量,如果没有,才回去其他文件查找

应用:

external + const 开发中应用最多, 开发中规定: 全局变量不能定义在自己类中,自己创建一个全局的文件去管理全局的一些东西.如下图所示:


const 宏 static extern_第4张图片
自定义全局文件.m中


const 宏 static extern_第5张图片
自定义全局文件.h中
自定义全局文件.h中(写法2)


const 宏 static extern_第6张图片
其他文件的应用图

你可能感兴趣的:(const 宏 static extern)