- 前言
很多人搞不懂這種問題,打算整理一篇文章當自己忘記的時候,也可以翻來看看
- 目錄
1. extern const static define 用法
2. 深層次理解 extern const static define
一 . extern const static 用法
const 一般用來定義一個常量
// 不可以被修改
NSString* const text = @"Text";
// 可以被修改
NSString const *text = @"Text";
- extern
外部變量,引用其他類的全局變量
.m 文件中
NSString* const scheme = @"Scheme";
.h 文件中
extern NSString* const scheme;
在其他文件中可以直接訪問。
或者采用下面這種寫法:
在一個文件中
NSString * const str = @"123";
在另外一個文件中引用的時候:
extern NSString* str;
- static 修飾的變量是一個私有的全局變量
作用: 延長局部變量的生命周期,程序結束時才會銷毀
例如: 在一個文件中聲明:
static NSString* const scheme = @"Scheme";
在另外一個文件中聲明 :
extern NSString* scheme;
編譯階段不會報錯,但是在運行期,會報如下錯誤:
E9C6FC8D-45E3-4A0F-9472-853FD6AB1B5D.png
- define
是一條預編譯指令,編譯器在編譯階段會將所有使用到的地方簡單的進行替換
用法:
#define SCHEME 100
二 . 深層次理解 extern const static define
const 和 define
相同點:
const 和 define 都能定義一個常量,都能實現修改值修改一次,
所有用上該變量的值都能做到同步的修改,
這樣代碼就變得易于維護,提高代碼的效率。
不同點:
const 給出的是對應內存的地址,所以const定義的常量在程序運行過程中只有一份拷貝
而 #define 定義的常量在內存中有若干個拷貝
宏能做到 const 做不到的事情:
1. 宏能定義函數
2. 宏能根據傳入的參數生成字符串
#define string(str1,str2) #str1#str2