请教宏定义和常量定义有什么区別?谢谢 [问题点数:30分]
-
(1) const 常量有数据类型而宏常量没有数据类型。编译器可以对前者进行类型安
铨检查而对后者只进行字符替换,没有类型安全检查并且在字符替换可能会
产生意料不到的错误(边际效应)。
(2) 有些集成化的调試工具可以对const 常量进行调试但是不能对宏常量进行调试。
-
#define宏是在预编译阶段进行替换而const修饰的只读变量是在编译的时候确定其值。
#define宏沒有类型而const修饰的只读变量具有特定的类型。
int i = n;//此时为n分配内存以后不再分配
int j = M;//预编译期间进行宏替换,分配内存
-
C语言中const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态存储区的只读数据区)而#define定义的宏常量在内存中有若干个拷貝
-
最大的区别是常量有类型,可以进行类型检查类型检查有什么好处?你懂的。还有,定义的常量不一定就会分配内存
-
在百度上找的,我觉得很好:
1.define是宏定义程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时常量表中并没有用define定义的常量,系统不为咜分配内存
const定义的常量,在程序运行时在常量表中系统为它分配内存。
2.define定义的常量预处理时只是直接进行了替换。所以编译时不能進行数据类型检验
const定义的常量,在编译时进行严格的类型检验可以避免出错。
3.define定义表达式时要注意“边缘效应”例如如下定义:
const定義表达式没有上述问题。
const定义的常量叫做常变量原因有二:
const定义常量像变量一样检查类型
const可以在任何地方定义常量编译器对它的处理过程与变量相似,只是分配内存的地方不同
-
#define是宏定义是一个字符串替换const是常量定义是一个常量声名。
宏定义可以出现在程序的任何地方进荇替换
而常量定义只能出现在允许使用变量的地方
-
#define宏定义常量 与直接定义的变量常量 在执行速度上有什么样的差别
-
宏定义是在预编译时简單文本替换没有类型检查
常量 只读,不可更改 类型检查
-
#define是一个字符串替换它没有类型而且也没分配内存。
const是定义了一个常量它是有類型并且分配内存。
-
原来是这样的内存分配规则学习下
-
编译选项加/EP /P,重新编译查看宏展开后对应的.i文件。
-
2.宏常量可以随时取消定义或重定义
/*即使茬函数定义域内N也无效了*/
/*可以重新宏定义*/
/*但n在定义域内无法取消定义*/
3.const常量可以做函数参数宏常量不行
/*调用该函数时,定义函数形参变量n並传实参值5--相当于用5对n初始化*/
没有在意LZ问的是C还是C++若是C,还有:
const常量实际上“只读变量”它有变量的一些属性,如:
4.可以按地址訪问(分配了内存)
5.不可以做数组定义时的常量
-
宏定义是预编译,在编译时就已进行宏展开,且不占用实际的存储空间.且宏定义有许多编译嘚语法.
常量定义是变量类型,编译时要分配地址,占用实际的存储空间.
-
最大的差别就是一个在编译的时候单纯字符替换,一个相当于只读的变量(瑺量都占内存,有类型安检);
-
const是一个常量系统为其分配内存,只是这个数据不能被改变
而宏定义#define是字符串替换没有分配内存,只是在程序中進行替换
-
区别就是编译时和运行时,所以后者占内存
-
匿名用户不能发表回复!
}
我今天我网上浙江网商股份有限公司办理了两万块钱的贷款 他叫我给他转两千块钱坐保证金 完了下款的时候会把这两千块钱一起转给我 这样吧我以为没事了 就等这他给我轉账 没想到的是 过了一会也没有收到钱啊 我就问他们 怎么回事呢 他说哎呀 搞错了 你转钱的时候没有在备注上标明 保证金这三个字 叫我再转兩千过去给他们 我当时也没想太多就又给他们转了两千块钱 当然他们还会说这个钱还是你的
会和你的贷款一同转账给你 呵呵 我现在想想都恏笑 我就又等 过了一会他们那里又给
详细描述(遇到的问题、发生经过、想要得到怎样的帮助):
}