c - C语言中的#define和 '='有什么区别?

标签 c

<分区>

例如

之间有什么区别吗
#define LIMIT 100

int LIMIT= 100;

如果没有,有没有哪个使用场景可以用一个,另一个不行?

最佳答案

第一个定义了一个 preprocessor macro在预处理期间,它将在代码中的任何地方被替换为它的值。

#define SIZE 4

int main() {
    int matrix_1[SIZE][SIZE] = { 0 };
    int* array = malloc(SIZE * sizeof(int));
    /* ... */
}

SIZE 的值无法在运行时更改。预处理后,上面的代码将更改为以下内容:

int main() {
    int matrix_1[4][4] = { 0 };
    int* array = malloc(4 * sizeof(int));
    /* ... */
}

第二个初始化一个 int 变量,该变量将分配在堆栈上,您可以在运行时修改它。

int main() {
    int size = 4;
    size = 12; /* size in now 12 */
    int* array = malloc(size * sizeof(int));
    /* ... */
}

size 不能用在需要整数常量的上下文中,例如作为位字段的大小,作为 enum 常量的值,作为 switch 语句的 case 标签等。

关于c - C语言中的#define和 '='有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45141691/

相关文章:

c - NASM 与 C 混合

c - 16bit*32bit MUL 结果为48bit

c - 随机数快速排序

c - 散列整数集的最简单方法?

c - GDB:如何在gdb中识别当前函数的特定变量的变量声明行号

c - 我不了解C字符串

c - 阶乘作为连续数的总和

c - 释放指针会释放它引用的内存吗?

c - 字符串的名称是 char 指针吗?

double 可以用来表示 64 位数字而不损失精度吗