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查看具体细节:点击下载

目录
打赏
0
0
0
0
2
分享
相关文章
|
9月前
|
C++
C总结-关键字 static const extern
C总结-关键字 static const extern
54 0
constexpr、const和 #define 的比较
本文比较了 `constexpr`、`const` 和 `#define` 在 C++ 中定义常量和函数的优缺点。`constexpr` 用于编译期求值,提供更高的性能和类型安全性;`const` 保证变量在运行期间不可修改,增强代码可靠性;`#define` 用于宏定义,适用于简单的常量和跨平台兼容性。选择时应根据具体需求和代码上下文决定。
68 0
#define 与 const 区别
#define 与 const 区别。
80 1
const与#define的区别与联系
const与#define的区别与联系
127 0
#define 以及##
#define 以及##
125 0
尽量以const、enum、inline替换#define
尽量以const、enum、inline替换#define
199 0
尽量以const、enum、inline替换#define
define需要注意的点
define需要注意的点
178 0
define需要注意的点
iOS 常用关键字 static、const、 extern、define
const 常量: 共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以被修改,在编译阶段会执行类型检查. 全局常量 包括在 .h .m 文件除非 ****@implementation**** 作用域内声明的, 都属于全局常量, 都可能由外部进行访问。
1465 0

热门文章

最新文章