美文网首页
Macros & Variable & Const

Macros & Variable & Const

作者: ienos | 来源:发表于2020-05-25 16:38 被阅读0次

1)static

  • static 修饰的变量只会初始化一次,会存储在静态全局区,且生命周期为程序和程序的生命周期相同

  • static 可修饰局部变量、全局变量

  • 修饰全局变量时,使用范围为只能在本类中使用,即 ClassA.mClassB.m 均可以声明并定义相同名字的变量

  • 没有用 static 修饰的变量,全局可用

  • static 修饰局部变量,程序运行过程中始终使用同一块内存空间。(局部变量存在于栈区,而用 static 修饰的局部变量,存在静态区)

2)const

  • const 用来修饰右边的基本变量或指针变量

  • 被修饰的变量只读,不能被修改

< 使用 const 修饰的几种形式>

注: *p 表示指针,p 表示变量

表达式 结果
int const *p const 修饰 *p 只读,p 变量
int *const p const 修饰 p 只读,*p 变量
const int *const p const 修饰 p 和 *p 都只读
int const *const p const 修饰 p 和 p 都只读

3)extern

  • 在 .m 中定义,在 .h 用 extern 修饰,用于外部引用

~~ 举例,常见我们会定义一个常量,但是具体值不会暴露在 .h 文件

  • ClassA.h 文件中声明 extern NSString *const variable;
  • ClassA.m 文件中定义 NSString *const variable = @"";

Q: 那么如何在 ClassB.m 中使用该常量

  • 这时候当我们在 ClassB 中导入 ClassA,就可以引用该常量
  • 除了在 ClassB 中导入 ClassA 的方法外,也可以在在 ClassB.h 中声明相同的变量,然后在 ClassB.m 中引用该常量

👆 以上两种方法都会指向在 ClassA.m 中定义的变量

3)#define

  • 一般定义常量 const 会比宏更加安全,宏不做类型检查,只是替换
  • 值的替换,需要注意表达式中优先级问题

例如 #define SUM(x, y) x+y

1 * SUM(1, 2) 等价于 1 * 1 + 2

1. 常见宏定义使用

  • \#define NAME @"SAM"
  • \#define Log(x) NSLog(@"This is a log: x = %@", x)

2. 宏定义中的操作符

符号 别名 例子
## 连接操作符 #define single(name) +(instance)share##name;
#@ 字符化操作符 (字符串转字符):例如 : “1” -> ‘1’
# 字符串化 #代表 "",即 #x 等价于 "x"
\ 行操作符 宏定义的回车,在末尾添加,最后一行可不加
__VA_ARGS__ 接收不定数量的参数 #define eprintf(...) fprintf (stderr, __VA_ARGS__);__VA_ARGS__ 前面加 ## 时,可以省略参数输入

3. 宏的 if-else

#ifdef DEBUG
#elif 
#else
#endif

4. 不同 Target 或者不同 Environment 下不同的宏定义设置
OC . Build Setting -> Preprocessor macros 添加对应的宏 MODE=1
Swift . Build Setting -> Other Swift Flags 添加宏 -D MODE

相关文章

  • Macros & Variable & Const

    1)static static 修饰的变量只会初始化一次,会存储在静态全局区,且生命周期为程序和程序的生命周期相同...

  • Go入门7:常量 const

    const关键字 const variable type = value; 简单定义: const LENGTH ...

  • 2.0 Introducing JSX 介绍JSX

    Consider this variable declaration: 考虑这个变量声明: const eleme...

  • 回归

    1.连续输出 本课关于连续(变量)的监督式学习The output variable has been const...

  • 01.ECMAScript常用新语法介绍

    ES6(ECMAScript 6) 一些常用新语法说明 1.定义常量 Variable 1.1 const:定义常...

  • TensorFlow C++ CPU 模型预测优化加速

    如下图所示,TensorFlow在移动端的上线流程常包括下面几个步骤: 固化模型->将variable转const...

  • 实现表达式求导

    思路^_^: 1.创建表达式类(Exp、Const、Variable),并实现eval(计算表达式的值)和deri...

  • Macros

    OS_OBJECT_USE_OBJC如果OS_OBJECT_USE_OBJC=1,则ARC,否则手动管理

  • var、let和const的区别

    var 是 variable的简写,变量的意思let 从字面理解是‘让’的意思,在这里代表着局部声明const 定...

  • ECMAScript 6 新的声明方式

    ES6对声明进行了扩展,新增了let 和 const命令。 var:它是variable的简写,可以理解成变量的意...

网友评论

      本文标题:Macros & Variable & Const

      本文链接:https://www.haomeiwen.com/subject/uvifghtx.html