static,const,extern,以及全局常量
1:全局常量的定义:1:创建Header头文件,再创建与Header头文件类名相同的空文件作为.m文件,.h文件引用文件,.m文件负责定义常量
#import <UIKit/UIKit.h> UIKIT_EXTERN const CGFloat XMGRed;
UIKIT_EXTERN const CGFloat XMGGreen;
UIKIT_EXTERN const CGFloat XMGBlue;
UIKIT_EXTERN const CGFloat XMGAlpha;
UIKIT_EXTERN const int XMGAge;
UIKIT_EXTERN NSString * const XMGName;
#import <UIKit/UIKit.h> const CGFloat XMGRed = 0.4;
const CGFloat XMGGreen = 0.6;
const CGFloat XMGBlue = 0.7;
const CGFloat XMGAlpha = 1.0;
const int XMGAge = ;
NSString * const XMGName = @"jack";
补充:1:若无法识别CGFloat结构体,则引入头文件,
#import <UIKit/UIKit.h>
2:.m文件中定义的常量,用const修饰代表常量。其中const CGFloat a = 10.f; 和 CGFloat const a = 10.f;两种写法是一样的,都代表a值为常量,不可修改,但是外部可通过extern CGFloat a;引用该变量,若无const,则通过extern引用a后也可修改。全局变量若只想被该文件所持有,不希望被外界引用,则用static修饰,也就是static const CGFloat a = 10.f;和 static CGFloat const a = 10.f;是一样的,注意只有全局变量用static修饰时,才只被该文件所持有,外界不可引用。
const CGFloat XMGRed = 0.4;定义一个常量,若是全局变量,则可被外界引用,但不能修改
3:定义不可变字符串时:用 static NSString * const name = @"JACK";则指针name不可变,外界不可以给该变量赋值。其中const修饰可变与不可变,就看const右边修饰的是什么 例如:NSString * const name = @"JACK",则代表指针name不可变,*name可变,若NSString const * name = @"JACK",则 *name不可变,指针name可变
4:UIKIT_EXTERN:其实就是extern,最好加上const,来告诉外界这个引用变量不可改变。
UIKIT_EXTERN const CGFloat XMGRed;
5:宏定义 与 static const 修饰的全局常量的区别:一般项目中尽量避免使用大量的宏定义,因为每一个宏定义都会在内存中临时开辟一份内存空间,而static const 修饰的常量 ,则只会开启一份内存空间,其使用效果和宏定义相同,建议以后项目开发中定义常量时,多用 static const 来代替宏定义
static,const,extern,以及全局常量的更多相关文章
- 嵌入式C语言3.4 关键字---类型描述符auto/register/static/const/extern/volatile/
对内存资源存放位置的限定 1. auto 默认值---分配的内存都是可读可写的区域 auto int a; 区域如果出现 {} 我们认为在栈空间 2. register register int a; ...
- (转)全局变量、extern/static/const区别与联系
全局变量.extern/static/const区别与联系 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LIN ...
- const(每个对象中的常量), static const(类的编译时常量)
1 每个对象中的常量 --- const数据成员 const限定,意味着“在该对象生命周期内,它是一个常量”. 关键字const 使被限定的量为常量 在该类的每个对象中,编译器都为其const数据成员 ...
- const、static和extern的正确使用方式
我们在看一些大牛的第三方时,里面会出现很多const.static和extern,尤其是const和static,const和extern的结合使用,直接令很多小伙伴懵逼了,今天就详细讲解一下这三个关 ...
- const、static、extern三个关键字
默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问. extern可以引用全局变量 例如,如果有一个全局变量int money = 100;extern int money ...
- static const vs. extern const
在实现文件(.m文件)中使用static const来定义“只在编译单元内可见的常量”(只在.m文件内可见),由于此类常量不在全局符号表中,所以无须为其名称加类名前缀(一般以k开头). 在头文件中使用 ...
- OC中修饰符:宏define 常量:const extern
const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...
- Objective-C中的const ,extern,static
一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 ...
- 如何正确使用const、static、extern
转自:http://www.jianshu.com/p/2fd58ed2cf55 前言 本篇文章主要介绍在开发中怎么使用const.static.extern关键字. 一.const 与宏的区别: c ...
随机推荐
- 火狐—火狐浏览器中的“HttpWatch”
在IE下通过HttpWatch能够查看HTTP请求的相关细节.这对我们分析程序的运行效率很有帮助,但是在火狐浏览器中的难道就没有相似的工具了吗?答案是否定的--火狐浏览器中也有.在火狐浏览器中该工具叫 ...
- thinkphp5空控制器和空操作
thinkphp5空控制器和空操作 一.总结 1.空控制器和空操作用:空控制器和空操作都是为了防止网站上的用户恶意输入,网站上线的话必须加上, 2.空操作:空操作就是在一般的控制器里面加上一个 _em ...
- @property 和@synthesize
xcode4.4之后,@property包括了@synthesize的功能. 这是编译器的升级. @property有几个作用:1)默认生成一个私有成员变量,并有一个带下划线的别名如_age 2) ...
- HTML5 API 是什么
HTML5 API 是什么 一.总结 1.html5有很多好的api可以用:例如绘图的canvas,获取地理位置的,获取手机电池信息的等等,后面用的时候可以百度 2.html5 API是什么:html ...
- 1.10 Python基础知识 - 序列:列表
在Python中有很多的组合数据类型,其中包括列表,元组,字符串等数据类型,这些数据类型统称为序列类型,用他们可以处理复杂的数据. 列表,是一组有序元素组合的数据结构.列表是可变的数据类型. 列表采用 ...
- Java 学习(17): Java 泛型
Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说将 ...
- HDOJ 5409 CRB and Graph 无向图缩块
无向图缩块后,以n所在的块为根节点,dp找每块中的最大值. 对于每一个桥的答案为两块中的较小的最大值和较小的最大值加1 CRB and Graph Time Limit: 8000/4000 MS ( ...
- Day1:字符编码
一.ASCII码 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码),8位,一个字节,最多只能表示255个符号. ...
- 【Codeforces Round #443 (Div. 2) A】Borya's Diagnosis
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟 [代码] #include <bits/stdc++.h> using namespace std; const ...
- 优雅地使用Retrofit+RxJava(二)
前言 在我上一篇讲Retrofit+RxJava在MVP模式中优雅地处理异常(一)中,发现非常多网友发邮箱给我表示期待我的下一篇文章,正好趁着清明假期.我就写写平时我在使用RxJava+Retrofi ...