C++使用const代替#define来定义常量

符号常量使代码更具可读性和可维护性。常量的名称表明了它的含义,如果需要更改值,只需在定义中更改一次值,然后重新编译。C 使用预处理器为常量创建符号名称:

#define MAX_LENGTH 100

然后预处理器在您的源代码中进行文本替换,在编译之前替换出现的MAX_LENGTHwith 100

C++ 方法是将const修饰符应用于变量声明:

常量 int MAX_LENGTH = 100;

这被视为MAX_LENGTH只读的int

使用该方法有几个优点const。首先,声明明确地命名了类型。


C 中的常量解释 – 如何使用 #define 和 const 限定符来定义常量

编程时,有时您会希望某些变量的值保持不变。在 C 语言中,您可能会将它们定义为常量。

您可以通过几种不同的方式在 C 中定义常量。在本教程中,您将学习如何使用#define以及const定义它们的限定符。

让我们开始吧。

如何#define在 C 中定义常量

在 C 中定义常量的常用方法之一是使用#define预处理器指令,如下所示:

#define <VAR_NAME> <VALUE>

在上面的语法中:

  • <VAR_NAME>是常量名称的占位符。
  • 建议您以大写字母命名常量,因为它有助于将它们与程序中定义的其他变量区分开来。
  • <VALUE>是取值的占位符<VAR_NAME>
  • #define是一个预处理器指令。
  • 在程序编译之前,预处理器将所有出现的 替换<VAR_NAME><VALUE>

在 C 语言中,预处理器在编译之前处理源代码以生成扩展的源代码。如下图所示。

在程序的头文件之后包含所有常量的定义是一个很好的做法,如下所示:

#include <stdio.h>

#define CONSTANT_1 VALUE_1
#define CONSTANT_2 VALUE_2
//

int main()
    {
        //statements here
    }

▶ 在下一节中,您将看到一个#define用于声明 C 常量的示例。

如何使用#define示例声明常量

考虑以下代码片段,其中有两个常量STUDENT_IDCOURSE_CODE.

#include <stdio.h>
#define STUDENT_ID 27
#define COURSE_CODE 502

int main()
{
    printf("Student ID: %d is taking the class %d\n", STUDENT_ID,COURSE_CODE);

    return 0;
}


# Output
Student ID: 27 is taking the class 502

在这个例子中:

  • 预处理器将STUDENT_IDCOURSE_CODE分别替换为 27 和 502。所以main()函数的主体现在将是:
int main()
{
    printf("Student ID: %d is taking the class %d\n", 27, 502);

    return 0;
}
  • 由于该printf()函数可以打印格式化字符串,格式说明符%d(十进制整数)的两次出现被 27 和 502 替换。

尽管

#define允许您定义常量,但您应该注意

不要在程序的其他地方重新定义它们。

例如,下面的代码,您重新定义了STUDENT_ID. 它将编译和执行而不会出错。

#include <stdio.h>
#define STUDENT_ID 27
#define STUDENT_ID 207 //redefinition of a #define constant.
#define COURSE_CODE 502

int main()
{
    printf("Student ID: %d is taking the class %d\n", STUDENT_ID,COURSE_CODE);

    return 0;
}

根据您的编译器,您可能会收到一条警告,提示您正在尝试重新定义已定义的常量。

并且将使用最新定义中的值。

注意重新定义的值是如何207被用作的STUDENT_ID,覆盖了之前定义的值27

所以你现在知道#define常数在某种意义上不是真正的常数,因为你总是可以重新定义它们。

前往下一部分了解const预选赛。

如何使用const限定符在 C 中定义常量

在 C 中,<data_type> <var_name> = <value>是声明<var_name>类型变量<data_type>并为其赋值的语法<value>

要制作<var_name>一个常量,您只需要在const此语句中添加限定符,如下所示:

const <data_type> <var_name> = <value>;

在变量的定义中添加

const关键字可确保其值在程序中保持不变。

const限定符使变量只读并且试图在程序的其他地方修改它会在编译过程中抛出错误。

▶ 前往下一部分,使用 修改前面的示例const

如何使用const限定符示例声明常量

在前面的示例中,您有常量STUDENT_IDCOURSE_CODE。现在您将使用const限定符将它们定义为常量。

  • 由于它们都是整数,因此您可以将它们定义为int数据类型,并采用预期的值:27502.
  • const在各自的定义中包含限定词。

这显示在下面的代码片段中:

#include <stdio.h>

int main()
{
    const int STUDENT_ID = 27;
    const int COURSE_CODE = 502;
    printf("Student ID: %d is taking the class %d\n", STUDENT_ID, COURSE_CODE);

    return 0;
}

# Output
Student ID: 27 is taking the class 502

您可以看到代码按预期工作。在 C 中,您不能重新定义现有变量。

例如,如果int my_var = 2是第一个定义,如果您尝试重新定义my_var为,您的程序将无法成功编译int my_var = 3。但是,您始终可以重新分配变量的值。

这意味着 ifint my_var = 2是定义,您可以my_var使用简单的赋值语句(如my_var = 3.

现在让我们尝试修改const变量STUDENT_ID

#include <stdio.h>

int main()
{
    const int STUDENT_ID = 27;
    STUDENT_ID = 207; // modifying a true constant: NOT POSSIBLE
    const int COURSE_CODE = 502;
    printf("Student ID: %d is taking the class %d\n", STUDENT_ID, COURSE_CODE);

    return 0;
}

你会看到程序没有编译成功。

并且错误消息显示:error: assignment of read-only variable 'student_id'意味着您只能读取的值STUDENT_ID而不能为其赋值。

因此,const限定符呈现了一个真正的常量,它不受更改的影响,并且在程序执行期间无法更改。

结论

在本教程中,您学习了如何定义常量:

  • 使用#define带有语法的预处理器指令#define <VAR_NAME> <VALUE>,以及
  • 使用const限定符将变量呈现为只读

希望本教程对您有所帮助。快乐编码!