[問題] 自動產生不同的定義值?

看板C_and_CPP作者 (消失)時間12年前 (2011/11/19 22:17), 編輯推噓8(8046)
留言54則, 8人參與, 最新討論串1/1
問題(Question): 假設的情況:(C語言) 情況1 情況2 typedef enum ResourceID { typedef enum ResourceID { ID1 = 3, ID1 = 4, ID2, ID2, ID3=-1, ID3, ID4=-1, ID4=-1, } } 當程式啟動的時候讀取某個檔案 如果如讀到的數值是3 則去修改第三個ID以後的enum值 如果如讀到的數值是4 則去修改第四個ID以後的enum值 簡單來說 問題就是程式啟動才會知道某個數值, 然後依照某個數值去產生不同情況的enum定義 要怎麼做到呢? 補充: 假設有A B C module, A 負責初始化, B C 都會用到ID1~4的值, 原本是利用寫死定義別名, 因此很方便, 但是想更改為"執行期間"讀取一個檔案的設定值來改變初始化的值, 而這個ID1~4的值仍然是B C module要用的, 如果原本用enum的話A B C都要include檔案,但是不需要初始化去改值 但是改用struct的話,變成B C還要自己初始化去改值,有點多此一舉? 想說是否有無更方便的方式 因為設定值式固定幾種變化而已, 或者是否有辦法在程式中定義那幾種變化造成不同的ID值, 然後再決定要用哪個呢? 餵入的資料(Input): 從檔案讀取一個數值 預期的正確結果(Expected Output): 會產生不同的eunm -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.49.62

11/19 22:20, , 1F
Impossible. Enum是compile time決定的
11/19 22:20, 1F

11/19 22:22, , 2F
了解, 那是否有其他恰當的修改作法的方式呢?
11/19 22:22, 2F

11/19 22:23, , 3F
你完全搞錯enum是幹麻的耶= =a
11/19 22:23, 3F

11/19 22:24, , 4F
我覺得你何不自己寫一個class來完成這個功能
11/19 22:24, 4F

11/19 22:26, , 5F
enum是給你方便用 不是叫你一定要用
11/19 22:26, 5F

11/19 22:30, , 6F
因為目前還沒想到較好的方式, class不是只有C++有嗎?
11/19 22:30, 6F

11/19 22:31, , 7F
那就...用struct= =?
11/19 22:31, 7F

11/19 22:33, , 8F
純C不能放function orz 麻煩忽略
11/19 22:33, 8F

11/19 22:41, , 9F
恩,想了一下struct好像也不太行
11/19 22:41, 9F

11/19 22:41, , 10F
即使在某個起始函式改過了,其他函式要用宣告後還是變回
11/19 22:41, 10F

11/19 22:41, , 11F
初始值
11/19 22:41, 11F

11/19 23:06, , 12F
如果用class內部放陣列如何?
11/19 23:06, 12F

11/19 23:11, , 13F
不知道怎麼回水球...
11/19 23:11, 13F

11/19 23:12, , 14F
不好意思沒說清楚,我的意思是說用c的struct
11/19 23:12, 14F

11/19 23:13, , 15F
struct裡面放一個陣列,類似enum的存值,但只能做到
11/19 23:13, 15F

11/19 23:13, , 16F
改變數值,不能像enum一樣用別名..
11/19 23:13, 16F

11/19 23:23, , 17F
定義四個變數ID1~4 runtime去設定初值不就好了嗎 = =
11/19 23:23, 17F

11/19 23:25, , 18F
ENUM的好處是可以設定別名,設定變數就不能摟
11/19 23:25, 18F

11/19 23:25, , 19F
恩,因為是希望一個地方初始化&設定後
11/19 23:25, 19F

11/19 23:26, , 20F
其他module都可以用, 所以一開始才用別名
11/19 23:26, 20F

11/19 23:26, , 21F
如果用設定變數...那每次要用到的都要先重新讀檔改值
11/19 23:26, 21F

11/19 23:30, , 22F
我想你這個要求,變數或陣列都能夠滿足,畢竟你要讀
11/19 23:30, 22F

11/19 23:30, , 23F
第幾個應該是在compiler時候就決定了吧
11/19 23:30, 23F

11/19 23:47, , 24F
抱歉可能沒說清楚,讀設定檔指的是程式啟動後才決定
11/19 23:47, 24F

11/19 23:48, , 25F
編譯時則沒有影響,執行時可能會依照檔案設定值不同而不
11/19 23:48, 25F

11/19 23:59, , 26F
一直推文討論才看得到真正(?)的需求是什麼...
11/19 23:59, 26F

11/20 00:02, , 27F
內文"當程式啟動的時候讀取" --> 我寫得不夠明顯 抱歉
11/20 00:02, 27F

11/20 00:08, , 28F
開個struct放在global好了XD
11/20 00:08, 28F

11/20 00:13, , 29F
這樣可能變成其他module都要去include某檔@@
11/20 00:13, 29F

11/20 00:14, , 30F
或者有辦法先建立一些可能的值寫死,然後讀檔後再去判斷
11/20 00:14, 30F

11/20 00:15, , 31F
要用哪個?不過還是會遇到struct的問題 或是要用其他方式
11/20 00:15, 31F

11/20 00:18, , 32F
把需求描述的具體一點吧 不然要橫跨..自己寫setter?
11/20 00:18, 32F
內文多一段補充段落... ※ 編輯: paulyanzi 來自: 114.42.49.62 (11/20 00:28)

11/20 00:28, , 33F
不知道為什麼強調要用"別名"?
11/20 00:28, 33F

11/20 00:29, , 34F
modules 怎麼傳遞這些你所謂的"enum"訊息?
11/20 00:29, 34F

11/20 00:34, , 35F
算了, 我差太多實在切不進去.
11/20 00:34, 35F

11/20 00:41, , 36F
抱歉,可能是我表達的方式有誤,
11/20 00:41, 36F

11/20 00:47, , 37F
原本的沒有傳遞,因為編譯時期取代掉了? 所以沒這問題
11/20 00:47, 37F

11/20 00:51, , 38F
用map怎麼樣?
11/20 00:51, 38F

11/20 00:56, , 39F
Resource ID.. 你要的事情是不是和 UI 扯在一起?
11/20 00:56, 39F

11/20 00:57, , 40F
子控制的顯示會依使用者不同而顯示不同?
11/20 00:57, 40F

11/20 01:18, , 41F
你enum也要include.跟宣告h檔寫struct再include有差嗎..
11/20 01:18, 41F

11/20 01:37, , 42F
還是你的enum是分別寫四份在ABCD?這樣我覺得沒有比較好
11/20 01:37, 42F

11/20 01:38, , 43F
哪天多個module E,ABCD要全改.不如都include同一份h.
11/20 01:38, 43F
※ 編輯: paulyanzi 來自: 114.42.54.233 (11/20 08:35)

11/20 08:46, , 44F
原po為什麼會一直認為用enum的話abc各自要初始化?
11/20 08:46, 44F

11/20 08:47, , 45F
上面推錯,是認為struct要各自初始化
11/20 08:47, 45F

11/20 08:47, , 46F
就直接宣告一個struct,然後大家一起用,用enum也是
11/20 08:47, 46F

11/20 08:48, , 47F
在compiler時候就決定要讀取那一個別名,這樣用
11/20 08:48, 47F

11/20 08:48, , 48F
struct也一樣...,還是我有誤解原po的意思?
11/20 08:48, 48F

11/20 08:55, , 49F
http://codepad.org/6YOB3dmM 我的意思是這樣
11/20 08:55, 49F

11/21 00:59, , 50F
一起用的話,所以是要傳指標給其他需要用到的程式了?
11/21 00:59, 50F

11/21 09:32, , 51F
用同一個指標就好了,如果其他程式要當然要傳過去了
11/21 09:32, 51F

11/21 13:07, , 52F
:了解,現在就必須先想辦法傳過去了,原本想得太簡單
11/21 13:07, 52F

11/21 13:07, , 53F
因為原本不同程式間並沒有互相呼叫,只是剛好要利用到同
11/21 13:07, 53F

11/21 13:07, , 54F
同樣的資訊,現在就是要想辦法傳過去了
11/21 13:07, 54F
文章代碼(AID): #1EnxfUq9 (C_and_CPP)