C++基础:(2)const关键字和宏定义#define的相同之处和区别

C++中的const修饰的,是一个真正的变量,而不是C中变量(只读)。在const修饰的常量编译期间,就已经确定下来了。

下面这段代码展示的是const可以完成和#define一样的(对比你也看到了,不用const关键字而只用int变量是不能被编译器通过的)

#include 

using namespace std;

#define c (20)

int main()
{
    int a = 10;
    int b = 20;

    //**************************************************************************
    char arr[a+b] = {0};
    // 需要注意的一点!!!
    // C和C++编译器都不支持变量做数组下标,
    // 但是在Linux内核中可以通过编译。
    // 为了养成好的代码习惯:不要用这种虽然通过但是不规范的写法!!!
    //**************************************************************************    
    //
    const int d = 20;
    const int e = 10;

    // 下面这句话在C/C++编译器中都可以通过
    char  arr2[d+e] = {0};
    // 下面这句话在C/C++编译器中都可以通过
    char arr3[c+d] = {0};

    return 0;
}

理解加深,C++中的关键字const和宏定义#define的不同之处在于二者的工作方式:

  • const常量由 编译器处理,提供类型检查和作用于检查;
  • |#define 由预处理器处理,单纯的文本替换。
#include 

using namespace std;

void fun1()
{
    #define a 10
    // #undef a

    const int b = 20;
}

void fun2()
{
    printf("a = %d\n", a);
    printf("b = %d\n". b);
}

int main()
{
    fun1();
    fun2();

    return 0;
}

通过代码结果我们可以看到:

  • |#define的作用域是由#undef来确定的,且#define不受函数作用域的限制;
  • const int b 的作用域就在fun1()内部,无法在别的地方直接使用。

你可能感兴趣的:(C++基础:(2)const关键字和宏定义#define的相同之处和区别)