我正在嘗試查看錶格。這是藉口:將用戶輸入字符串與MACRO名稱進行比較
假設,以下是某些宏的定義列表。
#define ENTITY1 0x10001001
#define ENTITY2 0x10001002
.
.
.
的ENTITY_是否則無符號長整數型值的用戶可讀的字符串值,並且可以存在任何數量的宏(說大於200或甚至500)。
現在,有一個列表可以跟蹤哪個實體存在於哪個文件編號中。例如:
0x10001001 1
0x10001002 2
0x10001003 3
.
.
.
由於專有約定,每個ENTITY使用長無符號整數是必需的。
第一個列表已經存在,第二個列表需要在用戶輸入記錄時通過使用第一個列表的#define中的宏字符串通過程序生成。由於這些條目的數量非常大,因此對每個值進行硬編碼是一項繁重的任務。另外,如果更新第一個列表,如果沒有編碼額外的開關情況,第二個列表將不會適當更新。
當用戶輸入一個條目時,他通過一個字符串變量告訴該條目將在ENTITY3中創建,如果一個宏以名稱ENTITY3存在,系統應該查找該條目。如果是,則用數字3打開文件並進行必要的處理,否則顯示警告:這樣的條目不存在。
那麼,如何在不使用SWITCH CASE的情況下將用戶輸入的字符串變量與宏名稱進行比較?
我正在使用C編程。 GNU C庫。
編輯:這是場景。
名爲ENTITYn(n可以是任何數字)的不同實體可以存在於具有特定整數1,2,3的不同文件中...但是,專有環境已經建立了這些實體,使得它們是使用某些無符號的長整數(如0x01001001等)進行識別。對於每個實體,已經在與這些實體對應的某些頭文件中通過名稱ENTITY1 ENTITY2 ... 定義了宏。現在,當某個管理員想要更改某些內容或輸入某些數據對於一個特定的實體,他將使用名稱ENTITYn來尋址,程序將在查找表中查找相應的條目。如果找到匹配項,它將使用該實體的無符號長整數代碼用於專有系統內部的後續處理,訪問另一個查找表,查找哪個文件編號具有此條目並打開該文件位置進行處理。
我需要使用實體的無符號長整型和它們相應的位置(讓所有實體現在處於單個文件1中)填充此第二個表。我想規避這種情況,即使那個LUT必須知道相應的實體無符號長整數代碼。該程序使用輸入字符串即ENTITY1並直接映射它。
但現在我開始認爲對LUT進行硬編碼將是一個更好的選擇。 :)
我已經爲您的問題寫了一個初步的答案,但我沒有完全理解您的方案。你是否試圖在運行時將一個字符串(例如「ENTITY1」)映射爲一個整數(0x10001001)? –