簡體   English   中英

使用宏連接變量

[英]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}
    },
    /* ... */
};

然后,您可以使用var1var3作為索引直接訪問它們:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM