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 函数中的局部变量

扫描二维码关注公众号,回复: 10385729 查看本文章

如果我想要 a 也变成局部的

那么可以这样

void f1()
{
#define a 10
    const b = 20;
#undef
}

#undef强行将前面所有的#define取消

猜你喜欢

转载自www.cnblogs.com/qifeng1024/p/12616131.html
今日推荐