c - 宏预处理器指令

标签 c c-preprocessor

我对宏预处理器指令有想法。在下面的问题中,编译器如何完成源代码中的替换,它给出的输出为 “y 是 392”

#include <stdio.h>
#define CUBE(x) (x*x*x)
void main(void)
{
     int x;
     int y;
     x = 5;
     y = CUBE(++x);
     printf("y is %d\n", y);
}

输出:y 为 392。

最佳答案

您的代码的行为未定义

CUBE(++x) 扩展为 (++x *++x *++x):该表达式中没有排序点,并且它同时读取和写入x

这概括了为什么进行算术的宏在计算上是致命的。

关于c - 宏预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646282/

相关文章:

copy_from_user函数打印垃圾值

c - 如何在 C 中迭代指向 char 数组的指针?

c - sleep() 没有正确延迟 printf() 输出

c++ - 递增预处理器宏

c - 旋转右位

c - TCP 客户端/服务器程序不接收消息

c - 为什么#define 不需要分号?

c - 在初始化数组时使用#define 并作为 C 中函数的参数时出现语法错误?

c - 使用 C 预处理器打印一些内容

c - 什么时候在预处理中删除换行符?