宏定义中是使用 const 还是 使用 define

转载 2016年06月01日 14:42:29
const 和 define 在开发中常用来定义常量,这样做的好处是:使代码更易维护、提高代码的效率。

1、const
const是C/C++中的一个关键字(修饰符), const一般用来定义一个常量, 既然叫做常量, 即以后再也不能修改其值。
const 定义常量时,编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率比宏定义要高。从汇编的角度来看,只是给出了对应的内存地址,所以,const定义的常量在程序运行过程中只有一份拷贝。
const 定义常量时,通常是同时定义常量的类型、值,且常与 static 结合使用。
如:
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. static CGFloat const kScale = 0.8;  
  2. static NSString *const identifierCell = @"ListCell";  

2、define
define, 宏定义, 则是一条预编译指令, 编译器在编译阶段会将所有使用到宏的地方简单地进行替换。
define 定义常量时,在内存中有若干个拷贝。
define 定义常量时,只是定义了常量的值,但未做类型设置。

define 除了定义常量外,还能进行高级宏定义功能
如:定义函数;定义OC中常用的单例模式;还能根据传参数生成字符串。
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /// 定义常量  
  2. #define USERID @"123456"  
  3. /// 获取当前app delegate  
  4. #define GetAPPDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)  
  5. /// 打开浏览器  
  6. #define OpenUrlInExplorer(urlString) {NSURL *url = [[NSURL alloc] initWithString:urlString];[[UIApplication sharedApplication] openURL:url];}  

个人建议在确定了使用的常量类型,及常量值时使用 const 进行定义;而简单的函数,或传参字符串等高级定义时,则使用 define 进行宏定义。

const常量与define宏定义的区别

#define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同   define宏是在预处理阶段展开。 ...
  • sinat_20265495
  • sinat_20265495
  • 2016年10月27日 15:19
  • 2503

宏定义#define的用法

#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令...
  • u013910522
  • u013910522
  • 2014年03月31日 15:26
  • 3226

define宏定义中的#,##,@#及\符号

一、# 名称:字符串化操作符 其作:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。 使用条件:只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前 举例:...
  • zhubosa
  • zhubosa
  • 2016年04月28日 18:17
  • 2258

define宏定义和const常量定义之间的区别

define部分: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。) 宏的语法为: #define 宏名称 宏值 注意,...
  • tianzhaixing
  • tianzhaixing
  • 2013年09月09日 18:33
  • 2039

为什么 C++ 中提倡尽量避免使用宏 #define(转)

为什么c++不提倡使用宏定义#define
  • WangPegasus
  • WangPegasus
  • 2014年01月16日 15:46
  • 3480

正确使用iOS常量(const)、enum以及宏(#define)在iOS开发中请尽量多使用const、enum来代替宏定义(#define);随着项目工程的逐渐增大,过多的宏定义还可能影响项目的编译

在iOS开发中请尽量多使用const、enum来代替宏定义(#define);随着项目工程的逐渐增大,过多的宏定义还可能影响项目的编译速度。 宏定义大家应该都不陌生,使用起来非常简单,首...
  • steve_e
  • steve_e
  • 2016年06月01日 14:28
  • 662

宏定义#define括号使用的深入认识

宏定义:注意x,y值都有一个括号,和特定的符号时 需要加上括号! // SWAP(x, y)               交换x,y的值   #define SWAP(x, y) \       (y...
  • ljb825802164
  • ljb825802164
  • 2016年01月09日 19:45
  • 311

宏定义中是使用 const(static) 还是 使用 define

const 和 define 在开发中常用来定义常量,这样做的好处是:使代码更易维护、提高代码的效率。 1、const const是C/C++中的一个关键字(修饰符), const一般用来定义一个常...
  • potato512
  • potato512
  • 2016年05月19日 15:42
  • 1141

详解宏定义(#define)

C语言中用到宏定义的地方很多,如在头文件中为了防止头文件被重复包含,则用到:#ifndef cTest_Header_h #define cTest_Header_h //头文件内容 #endif在我...
  • yanggangclcsdn
  • yanggangclcsdn
  • 2015年11月07日 18:18
  • 3023

多行宏定义中的注释问题

早上在写代码时遇到这样一个问题:即如何在一个拥有多行的宏定义中做注释?,这里把方法演化的过程贴出来,可能对某些朋友有些借鉴意义。 宏定义高深莫测,而且是比较细节的东西,详细说明请参见"C参考手册...
  • longbiao831
  • longbiao831
  • 2014年07月02日 17:29
  • 896
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:宏定义中是使用 const 还是 使用 define
举报原因:
原因补充:

(最多只允许输入30个字)