簡體   English   中英

使用define將一個結構成員分配給同一結構的另一個成員

[英]use define to assign a struct member to another member of the same struct

typedef struct{
               [..]
               type_t member1;
               type_t member2;
               [...]       

}structType_t

我想將member1分配給member2。 由於這是重復的操作,因此我想到將Assignmet放在#define中:

#define op (structType_t).member1=(structType_t).member2

但是,這似乎是錯誤的,編譯器將如何知道它是同一結構的成員,而我看不到使用它的方法。 有任何想法嗎? 我知道我還有其他選擇,例如宏或函數,但是我的問題是這樣嗎?

編寫這樣的宏絕不是一個好主意。 可能無法編寫出比mystruct.member1 = mystruct.member2;更好,更易讀的mystruct.member1 = mystruct.member2;

如果出於任何原因要封裝它,請使用一個函數:

void structTypeMemberCopy (structType_t* obj)
{
  obj->member1 = obj->member2;
}

這很可能會內聯並替換為等效的mystruct.member1 = mystruct.member2; 在機器代碼中。

最后是一個壞主意宏,可以將其設置為安全類型:

#define structTypeCopy(obj) _Generic((obj), structType_t: (obj).member1 = (obj).member2)

...

structType_t mystruct = { ... };
structTypeCopy(mystruct);

您需要這樣定義宏:

#define a(T1) T1.n1 = T1.n2

a接收一個參數T1並進行賦值。

像這樣:

#include <iostream>

#define a(T1) T1.n1 = T1.n2

typedef struct {
    int n1;
    int n2;
} estructure;

int _tmain(int argc, _TCHAR* argv[])
{
    estructure test;

    test.n1 = 1;
    test.n2 = 2;

    a(test);

    std::cout << test.n1 << " " << test.n2 << std::endl;

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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