我在运行一个看起来像这样的程序时遇到了问题。
#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语言中实现吗? 如果第一个问题是正确的,是否可以实现这样的宏?
答案 0 :(得分:2)
您的宏正在尝试获取&
和b
并将其组合为单个令牌&b
。这不是有效的标识符,因此您不能这样做。但是,您想要的比这更简单:
#define ADDR_TOKEN_MACRO(x) &x
现在,您已将地址运算符应用于给定令牌。
实际上,在这里使用宏根本没有多大意义。您可以这样做:
*y = &b;
这是一个问题,因为没有为y
分配值,但是您尝试取消引用y
。我认为您确实正在尝试做的是:
int *i = (int *)0xDEADBEEF;
但是,如果您真的想这样做,也将引起疑问,因为用户不需要了解有关特定地址的任何信息。