extern,const,#define

简介: extern,const,#define

要做一个全局,您会怎么写?大多数开发者都会首选#define来定义一个全局参数,如数字,字符串,可是当你了解足够深,你会发现#define定义的参数是没有类型的,但是在使用的时候你发现+-*/是没有问题的,因为#define宏在预处理时只是实现了替换了,具体的运算是在编辑时才完成的。


这里推荐一种写法:const(不可变量)

static const int count = 10;

这样写的好处就是可以直接决定定义的值的具体类型。减少了拷贝次数,这里说明下,#define定义的宏是立即数,const是给定一个地址,所以在运行中,const存在于全局的静态区,只有一个地址,#define使用时会造成多次拷贝,所以在没有了存储和读内存的情况下效率也相对的变高了。


最后来说一下extern的用法,作用是饮用在另一个地方已经存在的全局变量;

比如在A类中有一个全局变量(注意全局变量,在@implementation和@interface之外),有一个值,但是在别的类中我想使用这个值,要么存本地,要么存数据库来访问,但是extern可以帮你直接访问到这个全局变量。

#import "A.m"
@interface SecViewController ()
@end
NSString *myName;
@implementation SecViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    myName = @"CodeLiu";    
}
#import "B.m"
@interface SecViewController ()
@end
extern NSString *myName;
@implementation SecViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"%@",myName);
也可以加const修饰,但是请注意const的用法和意义。
注:此方法对于字典和数组同样适用。

可下载Demo查看具体细节:点击下载

目录
相关文章
|
4月前
|
C++
C总结-关键字 static const extern
C总结-关键字 static const extern
18 0
|
7月前
|
编译器
#define 与 const 区别
#define 与 const 区别。
35 1
|
12月前
const与#define的区别与联系
const与#define的区别与联系
67 0
|
机器学习/深度学习
C中define的#和##
C中define的#和##
47 0
#define 以及##
#define 以及##
71 0
|
编译器 C++
尽量以const、enum、inline替换#define
尽量以const、enum、inline替换#define
154 0
尽量以const、enum、inline替换#define
|
C语言
define需要注意的点
define需要注意的点
136 0
define需要注意的点
|
存储 安全 编译器
C++:宏定义(#define)和常量(const)的区别
在测试对矩阵进行 SVD 分解时,需要定义矩阵的行和列的大小,下面我们开始思考宏定义和常量之间有些什么样的分别。
521 0
C++:宏定义(#define)和常量(const)的区别
|
存储 编译器 iOS开发
iOS 常用关键字 static、const、 extern、define
const 常量: 共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以被修改,在编译阶段会执行类型检查. 全局常量 包括在 .h .m 文件除非 ****@implementation**** 作用域内声明的, 都属于全局常量, 都可能由外部进行访问。
1386 0
#define a int[10]与 typedef int a[10]用法
// #define a int[10] #include #include #define a int[10] int main() { int *p=(int *)malloc(sizeof(a)); p[0]=1; printf("%d\n",p[0]);...
1701 0