我在运行(简化后)看起来像这样的程序时遇到了问题。
#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 语言实现吗? 如果第一个问题成立,是否可以实现这样的宏?
最佳答案
您的宏正试图获取 &
和 b
并将其组合成单个标记 &b
。这不是有效的标识符,因此您不能这样做。然而,你想要的比这更简单:
#define ADDR_TOKEN_MACRO(x) &x
现在您已将地址运算符应用于给定 token 。
实际上,在这里使用宏根本没有多大意义。你可以这样做:
*y = &b;
这是一个问题,因为 y
没有被赋值,但您尝试取消引用 y
。我认为您真正想要做的是:
int *i = (int *)0xDEADBEEF;
但是如果你真的想这样做也是值得怀疑的,因为用户不需要知道关于特定地址的任何信息。
关于c - 地址运算符和变量标记连接宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53567406/