[英]concatenate the variable using Macro
我在Macro的地址中有不同的地址。 我需要選擇哪個地址取決於我的應用程序。 這里的細節如下。
#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}
},
/* ... */
};
然后,您可以使用var1
到var3
作為索引直接訪問它們:
uint32 Read_Address = fn[var1 - 1][var2 - 1][var3 - 1];
使用此源代碼來連接字符串。
#define fn(var1,var2,var3) (Location##var1##_Subset##var2##_sub##var3)
但是在您的程序中,您無法通過這種方式進行操作。因為宏是在預編譯時而不是在運行時處理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.