关于define和const

1.通过define定义的常量,在C语言里面一般叫宏定义。define的本质是简单的文本替换。

2.const定义一个变量,但是这个变量的值只能在定义的时候赋予,之后就不能被更改了。

  • 如果变量声明中带有关键字const,则不能通过赋值,增量或减量来修改变量的值。
  • 一个位于*左边任意位置const使得数据成为常量,而一个位于*右边的const使得指针自身成为常量。

3.(1) 编译器处理方式不同

  define宏是在预处理阶段展开。

  const常量是编译运行阶段使用。

(2) 类型和安全检查不同

  define宏没有类型,不做任何类型检查,仅仅是展开。

  const常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

  const常量会在内存中分配(可以是堆中也可以是栈中)。

(4)const  可以节省空间,避免不必要的内存分配。 例如:  
       
#define PI 3.14159 //常量宏  
       
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中
......  
       
double i=Pi;
//此时为Pi分配内存,以后不再分配!  
       
double I=PI;
//编译期间进行宏替换,分配内存  
     
  double j=Pi;
//没有内存分配  
     
  double J=PI;
//再进行宏替换,又一次分配内存!  
       
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。

(5) 提高了效率。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

时间: 2024-10-16 14:05:56

关于define和const的相关文章

define vs const vs enum

以前用C,习惯了define:const,enum 什么的基本不太会用,现在有时间整理一下. /***********************************************************************************************************/ define:宏定义,在预编译阶段,编译器将宏作简单替换.比如: #define SUNDAY 7 在预编译阶段,凡是文本中出现SUNDAY的地方,编译器就会将其用7来代替.这样的好处显

PHP中定义常量define与const

我们通常把不经常变的值定义成常量,常量一般用全部大写来表示,前面不加美元符号,也可减少团队开发的出错.那么define和const有什么区别呢? 1.const是一个语言结构:而define是一个函数,可以通过第三个参数来指定是否区分大小写.true表示大小写不敏感,默认为false define('PI', 3.14, true); 2.const简单易读,编译时要比define快很多. 3.const可在类中使用,用于类成员常量定义,定义后不可修改:define不能在类中使用,可用于全局变量

define() vs const 该如何选择?

使用 define(),除非考虑到可读性.类常量.或关注微优化 1.在 PHP 中是使用 define() 函数来定义常量,PHP 5.3.0 以后,PHP 中也能够使用 const 关键字来声明常量了,一个常量一旦被定义,就不能再改变或者取消定义 2.常量只能包含标量数据(boolean,integer,float 和 string).可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果 3.可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号

c++中 #define和const的区别

来源参考:https://blog.csdn.net/yi_ming_he/article/details/70405364 这个区别用从几个角度来说: 角度1: 就定义常量说的话:  const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型. 角度2: 就起作用的阶段而言: define是在编译的预处理阶段起作用,而const是在 编译.运行的时候起作用. 角度3: 就起作用的方式而言: define只是简单的字符串替换,没有类型检查.而const有对应的数据类型,

typedef和define,const,struct和typedef struct

先看几个例子 (1) struct{ int x; int y; }test1; 好,定义了 结构 test1, test1.x 和 test1.y 可以在语句里用了. (2) struct test {int x; int y; }test1; 好,定义了 结构 test1, test1.x 和 test1.y 可以在语句里用了. 与 1 比,省写 了 test (3) typedef struct test {int x; int y; }text1,text2; 只说了 这种结构 的(类型

iOS开发总结(A0)- #define 与 const

什么时候用#define ,什么时候用const ? effective objective c item4 中这样说: Prefer Typed Constants to Preprocessor #define 1. 避免 #define. 因为无类型信息,且可能会redefined 2. 在m文件中定义为 static const(实际上这种处理和#define一样) 3. 对于global constants,应在头文件中申明,在相关的m文件中定义,前缀为响应的类名称 如在.h 中, e

#define static const 用法 (转)

1.Define用法: define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间.在编译是会被编译器替换为该常数.每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝.这么做是为了提高程序的可读性,但安全性相对差点. 2.const用法: const定义的全局数据变量,其基本作用和define相同,但又在define的基础上增加了好多功能.const

define和const的区别

常量是一个简单值的标识符(名字).如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量).常量默认为大小写敏感.通常常量标识符总是大写的. 可以用 define() 函数来定义常量.在 PHP 5.3.0 以后,可以使用 const 关键字在类定义的外部定义常量,先前版本const 关键字只能在类(class)中使用.一个常量一旦被定义,就不能再改变或者取消定义. 常量只能包含标量数据(boolean,integer,float 和 string). 可以定义 r

关于全局变量,static,define和const

????其实按照现在主流的观点,应该尽量少用全局变量和define,尽量多用临时变量,并且用const替换值define,用短小精悍的函数替换函数define. ????对这些我倒是也没有什么意见,只是觉得有些东西存在就是存在,也是非常有道理的.比如define好了,虽然没有类型检查,也很难插错,连搜索reference都找不到东西在哪里. ????但是它对系统没有性能消耗,C语言又没有inline函数,也没有lambda表达式.如果不用define的话,函数就一定会有调用开销,这种开销看上去似