c - 地址运算符和变量标记连接宏

标签 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 语言实现吗? 如果第一个问题成立,是否可以实现这样的宏?

最佳答案

您的宏正试图获取 &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/

相关文章:

c - 如何在完全下载之前丢弃数据包

c - 关键字 '%type' 和 '%token' 在 C 中有什么用?

将十六进制值 (ASCII) 转换为文本

c - scanf 的问题

c - 从文件中读取字符串

我可以保持与 http 服务器的连接吗?

c - 二进制交织、二进制混合、交替位

你能隐藏c中的文件吗?

c - 从路径获取文件夹

c - 如何在C中生成一次范围内的随机数?