在许多程序中,#define的作用与常数相同.例如

#define FIELD_WIDTH 10
const int fieldWidth = 10;

我通常认为第一种形式比另一种更受欢迎,依靠预处理器来处理基本上是应用程序决策的事情.这种传统有什么原因吗?

推荐答案

这有一个非常坚实的理由:C中的const并不意味着某些东西是恒定的.它只是意味着变量是只读的.

在编译器需要真常量的地方(例如非VLA数组的数组大小),使用const变量(例如fieldWidth)是不可能的.

C++相关问答推荐

我可以动态分配具有空类型函数的矩阵吗?

Ebpf内核代码:permission denied:invalid access to map value

标准的C17标准是用括号将参数包装在函数声明中吗

为什么在函数内部分配内存空间时需要添加符号?

测量ARM MCU中断延迟的问题

如何在C中引发/处理自定义信号?

C中函数类型的前向声明

无法在OpenGL上绘制三角形

指向不同类型的指针是否与公共初始序列规则匹配?

我可以创建适用于不同endian的 colored颜色 struct 吗?

为什么Linux无法映射这个PT_LOAD ELF段?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

如何在C中定义指向函数的指针并将该指针赋给函数?

意外的C并集结果

可以对两种 struct 类型中的任何一种进行操作的C函数

按字典顺序打印具有给定字符的所有可能字符串

C语言中的指针和多维数组

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?

在 C 中的 scanf() 格式说明符中使用宏获取字符串长度

C23 中是否有 __attribute__((nonnull)) 的等效项?