@@ -124,14 +124,15 @@ int* const function7(); // 返回一个指向变量的常指针,使用:i
124
124
125
125
#### #define与const的区别
126
126
127
- ##### 常量定义的两种方式
127
+ ##### 两种定义方式
128
128
- 使用``#define``预处理器:``#define 变量名 变量值``
129
129
- 使用关键字``const``:``const 数据类型 变量名 变量值``
130
130
131
- ##### #define与const定义常量的区别
132
- 1. const定义常量时,需要带数据类型,而define不用带
133
- 2. const是在编译、运行的时候起作用,而define是在编译的预处理阶段起作用
134
- 3. define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应,
131
+ ##### 区别
132
+ 1. <b>类型定义不同。</b> const定义常量时,需要带数据类型,而define不用带;
133
+ 2. <b>编译器处理不同。<b>
134
+ - const是在编译、运行的时候起作用,而define是在编译的预处理阶段起作用;
135
+ - define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应
135
136
136
137
```cpp
137
138
#include <stdio.h>
@@ -140,38 +141,34 @@ int* const function7(); // 返回一个指向变量的常指针,使用:i
140
141
#define B A+3
141
142
#define C A/B*3
142
143
void main() {
143
- //分析过程
144
- //#define就是一个简单的替换
145
- //C其实是A/A+3*3 = > 1/1 + 3*3 = 10
146
144
printf("C=%d",C);
147
145
getchar();
148
146
}
149
147
```
150
148
151
- 这里替换的意思就是字面上的意思 ,比如说代码中A = 1,B = A+3,那么AB就为AB = AA+3 = 11+3;按照我们一般的思维,这里的AB应该为A(A+3),但实际上并不是,所以使用#define定义常量容易造成边界效应,如果想把B的值作为一个整体,就需要使用括号将值括起来。
149
+ 说明:这里替换是< b >原样替换</ b > ,比如说代码中A = 1,B = A+3,那么AB就为AB = AA+3 = 11+3;按照我们一般的思维,这里的AB应该为A(A+3),但实际上并不是,所以使用#define定义常量容易造成边界效应,如果想把B的值作为一个整体,就需要使用括号将值括起来。
152
150
153
- 4 . const常量可以进行调试,define不能进行调试,主要是预编译阶段就已经替换掉了,调试的时候就没它了;(简单点说,在预编译的时候就已经将常量替换成了对应的值,所以是没法调试的);
154
- 5 . const不能重新定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义,例如:
151
+ 3 . < b >是否可调试。</ b > const常量可以进行调试,define不能进行调试,主要是预编译阶段就已经替换掉了,调试的时候就没它了;(简单点说,在预编译的时候就已经将常量替换成了对应的值,所以是没法调试的);
152
+ 4 . < b >是否可重新定义。</ b > const不能重新定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义,例如:
155
153
156
154
``` cpp
157
155
#include < stdio.h>
158
156
#define PI 3.14 //定义一个常量
159
157
#undef PI //取消定义
160
158
#define PI 3.1456 //再次定义
161
- // const不能重新定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义
159
+
162
160
void main () {
163
161
const int n1 = 10;
164
162
printf ("%0.3f",PI * 10);
165
163
getchar();
166
164
}
167
165
```
168
166
169
- 6 . define可以配合#ifdef、#ifndef、#endif来使用,可以让代码更加灵活,比如我们可以通过`` #define `` 来启动或者关闭调试信息
167
+ 5 . < b >其他差别:</ b > define可以配合#ifdef、#ifndef、#endif来使用,可以让代码更加灵活,比如我们可以通过`` #define `` 来启动或者关闭调试信息
170
168
171
169
``` cpp
172
170
#include < stdio.h>
173
171
174
- // #define DEBUG
175
172
void main () {
176
173
#ifdef DEBUG //如果定义了DEBUG
177
174
printf("OK,调试信息");
0 commit comments