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取消

 

posted @ 2020-04-01 21:40  祁峰_1024  阅读(117)  评论(0编辑  收藏  举报