gpt4 book ai didi

使用宏连接变量

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:35 26 4
gpt4 key购买 nike

我在宏中有不同的地址。我需要选择哪个地址取决于我的应用程序。下面是详细信息。

#define Location1_Subset1_Sub1          0x011F
#define Location1_Subset1_Sub2 0x0150
#define Location1_Subset1_Sub3 0x0170
#define Location1_Subset2_Sub1 0x0190
#define Location1_Subset2_Sub2 0x01AF
#define Location1_Subset2_Sub3 0x01EF
#define Location2_Subset1_Sub1 0x0211
#define Location2_Subset1_Sub2 0x0230
#define Location2_Subset1_Sub3 0x0240
#define Location2_Subset2_Sub1 0x027F
#define Location2_Subset2_Sub2 0x02A0
#define Location2_Subset2_Sub3 0x02EF

上面的宏是地址。

if(cond)
{
var1 = 1;
if(cond)
{
var2 = 2;
}
if(cond)
{
var3 = 1;
}
}
uint32 = Read_Address = fn(var1, var2, var3);

这是我的应用程序示例。基于 var1、var2 和 var3,宏应该选择各自的地址。根据上面的例子。它应该选择地址 Location1_Subset2_sub1

我需要定义一个宏,它将连接变量。我尝试使用下面的宏,这是不对的。

#define fn(var1,var2,var3)    (Location##var1_Subset##var2_sub##var3)

它是连接字符串“Locationvar1_Subsetvar2_subvar3”。但我想要哪个将连接 var 中的值。如果有人指导我,我将不胜感激。

最佳答案

宏和变量存在于完全不同的世界中:它们无法读取变量的值。宏在预处理阶段被扩展,所以你的程序甚至还没有编译。他们只能对您的源代码进行纯文本操作。

考虑将常量存储在静态数组中:

static const uint32 fn[2][2][3] = {
{
{0x011F, 0x0150, 0x0170},
{0x0190, 0x01AF, 0x01EF}
},
/* ... */
};

然后你可以直接用 var1var3 作为索引访问它们:

uint32 Read_Address = fn[var1 - 1][var2 - 1][var3 - 1];

关于使用宏连接变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25946759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com