簡體   English   中英

動態識別結構成員

[英]identifying structure members dynamically

有什么可能的方法在運行時檢查結構成員?

例如,考慮以下代碼,

#include <stdio.h>

struct example{
    int value;
    char name[32];
    int score;
};

int main()
{
    char in[256]={};

    printf("enter member name :\n");
    scanf("%s",in);

    if(check_member(in) == 1) {
        printf("struct example has member %s \n,in);
        return 0;
    }
    printf("struct example has no member named %s \n,in);
    return -1;
}

如果我向該程序輸入value ,則應打印

結構示例具有成員價值

當我輸入test到該程序時,它應該打印

struct示例沒有名為test的成員

有沒有可能編寫函數check_member()

這是不可能的,因為在編譯之后,變量的名稱不會僅保存在堆棧的內存中,因此無法在運行時獲取數據。 當然,正如@Yunnosch所說,您可以將成員的名稱保存為字符串,然后使用strcmp。

對此可能有很多重復的答案。 如果必須這樣做,我將采用以下兩種方法之一進行處理:

  1. 我將建立自己的關於結構成員名稱,它們的偏移量以及它們的類型的小詞典。 我將使用標准的offsetof()宏來處理偏移量。 維護字典會很麻煩(尤其是如果經常在結構中添加或刪除成員),但這是不可避免的。 我拒絕使用預處理器技巧來“輕松”維護結構和字典定義的誘惑,因為從長遠來看,它們往往會使人更加困惑。

  2. 我根本不會使用C struct ,但會實現自己的關聯數組(可能使用哈希表)。

哦,等等,還有一個:

  1. 我將使用諸如SWIG之類的接口定義語言從單個更高級別的數據描述中自動生成我的結構聲明和運行時字典定義。

暫無
暫無

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

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