地址运算符和可变令牌加入宏

时间:2018-12-01 03:02:55

标签: c

我在运行一个看起来像这样的程序时遇到了问题。

#include <stdio.h>
#define ADDR_TOKEN_MACRO(x) & ## x
int main() {
    int *i;
    int **y;
    int b = 0xDEADBEEF;
    *y = ADDR_TOKEN_MACRO(b);
    return 0;
}

我试图将整数指针i的地址设置为0xDEADBEEF,但是如果我想让用户输入地址,我得出的结论是这是最好的方法。 但是,我不断收到此错误:

error: pasting "&" and "b" does not give a valid preprocessing token

首先,该程序背后的想法甚至可以在C语言中实现吗? 如果第一个问题是正确的,是否可以实现这样的宏?

1 个答案:

答案 0 :(得分:2)

您的宏正在尝试获取&b并将其组合为单个令牌&b。这不是有效的标识符,因此您不能这样做。但是,您想要的比这更简单:

#define ADDR_TOKEN_MACRO(x) &x

现在,您已将地址运算符应用于给定令牌。

实际上,在这里使用宏根本没有多大意义。您可以这样做:

*y = &b;

这是一个问题,因为没有为y分配值,但是您尝试取消引用y。我认为您确实正在尝试做的是:

int *i = (int *)0xDEADBEEF;

但是,如果您真的想这样做,也将引起疑问,因为用户不需要了解有关特定地址的任何信息。