const 和 #define 的异同
直接看代码
int a = 10; int b = 10; int array[a + b];
这种行为显然是错误的,如果这种方式可行,那么也不用费尽心思去搞什么动态分配内存了。(当然了不排除有些编译器能通过。)
但是如果我将a b 都定义为const,那么再所有编译器就都可以通过了
const int a = 10; const int b = 10; int array[a + b];
如果使用#define 那么效果和使用const是相同的:
#define a 10; #define b 10; int array[a + b];
接下来再看这样一种情况
void f1() { #define a 10 const b = 20; } int f2() { cout<<a<<endl; cout<<b<<ednl; }
在这种情况下,调用 f2 函数,打印a可以打印出来,但是b不可以
因为b属于在 f1 函数中的局部变量
如果我想要 a 也变成局部的
那么可以这样
void f1() { #define a 10 const b = 20; #undef }
#undef强行将前面所有的#define取消