define和const的区别

如题所述

下面使用#define和const定义常量:
复制代码
1 #define n_define 10
2
3 int main(int argc, char* argv[],int _version)
4 {
5 const int n_const=20;
6 int *p=(int *)&n_const;
7 *p=30;
8 printf("%d",*p);
9 printf("\n%d",n_define);
10
11 return 0;
12 }
复制代码
上述代码所对应的汇编代码如下:
复制代码
1 mov [ebp+var_4], 14h ;n_const的十六进制
2 lea eax, [ebp+var_4]
3 mov [ebp+var_8], eax ;int *p=(int *)&n_const
4 mov ecx, [ebp+var_8]
5 mov dword ptr [ecx], 1Eh ;*p=30
6 mov edx, [ebp+var_8]
7 mov eax, [edx]
8 push eax
9 push offset asc_432020 ; "%"
10 call printf
11 add esp, 8
12 push 0Ah ;n_define的十六进制
13 push offset aD ; "\n%d"
14 call printf
15 add esp, 8
复制代码
汇编代码1-11行对应C++代码5-8行。从汇编代码可以看得出来,在底层const常量和变量没区别。也就是说const定义的是假常量,本质上还是个变量,只不过编译器限制了我们对const常量的修改。而由#define定义的则不同。汇编代码第12行可以看出,编译器已经偷偷做了“手脚”:编译器将n_define替换成了0Ah,而这一步替换是发生在预处理阶段。n_define所对应的20已经变成了二进制,且在指令里面是属于立即数了。所以如果对n_define进行&n_define将会出错。
温馨提示:内容为网友见解,仅供参考
无其他回答

关于Const和Define的区别
一、表达意思不同 1、Const:n. 常量,常数; (Const)人名;(罗)康斯特 2、Define:vt. 定义;使明确;规定、n. (Define)人名;(英)德法恩;(葡)德菲内 二、词性不同 1、Const:通常作名词。例句:For structures and unions to be modifiable lvalues, they must not have any members with...

const和define的区别
1: 编译器处理不同 define宏是在预处理阶段展开,const常量是编译运行阶段使用。2:类型和安全检查不同 const常量有数据类型,而宏常量没有数据类型,仅仅是展开。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。3: 存储方式...

const和define的区别
define宏定义和const常变量区别:1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。2.define定义的常量,预处理时只是直接进行了替换。所以编译时不...

const和define的区别
const用于定义常量;而define用于定义宏,而宏也可以用于定义常量。都用于常量定义时,它们的区别有:1、const生效于编译的阶段;define生效于预处理阶段。预处理在编译之前,预处理器将源代码中的宏统一替换为指定的字符。从语义上讲,const是声明一个不可修改的数据,而define则是在对源代码进行替换。2...

#define和const定义的问题
const 是定义常量,其实就是值不能被改变的变量,和宏是不一样的。因此,const 只是对变量的修饰,你直接用 const PI=3.1415 是错误的,因为,去掉 const 后,PI 不是一个合法的变量定义,应该这样 const double PI=3.1415;如果这样定义:defing PI P const double P=3.1415 那么实际上相当于...

define与const的区别
就定义常量说的话: const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型。就起作用的阶段而言: define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。就起作用的方式而言: define只是简单的替换,没有类型检查。而const有对应的数据类型,是要进行判断的,...

define和const的区别
如果就单单定义常量说的话:const 定义的常数是变量 也带类型 define 定义的只是个常数 不带类型。

php const和define的区别
define不能。(3).const不能在条件语句中定义常量。(4).const采用一个普通的常量名称,define可以采用表达式作为名称。(5).const只能接受静态的标量,而define可以采用任何表达式。(6).const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

php const和define的区别
1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。2、define不能在类中定义而const可以。3、const不能在条件语句中定义常量 if (...) { const FOO = 'BAR'; \/\/ invalid } but if (...) { define('FOO', 'BAR'); \/\/ valid } 4、co...

const与#define的区别
const是定值常数 define可以定义恒等表达式,是用后一个表达式直接替换前表达式

相似回答