[問題] 請問#define問題

看板C_and_CPP (C/C++)作者 (wind)時間14年前 (2011/09/06 17:42), 編輯推噓6(6016)
留言22則, 6人參與, 最新討論串1/1
請問一下 若是我在test.c檔 想要用var=1來選擇要不要把b加入此struct if(var==1) #define CONFIG_VAR 1 else #define CONFIG_VAR 0 struct A{ a=1, #ifdef CONFIG_VAR b=2, (若是var=1,則加入 b=2, ) #endif c=3, } 我知道這樣寫是錯誤的 請問要如何讓#define CONFIG_VAR 是可以被var變數決定 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66 ※ 編輯: liptonbin 來自: 122.147.15.66 (09/06 17:50)

09/06 17:48, , 1F
#define 是編譯時期作的代換動作, 沒辦法讓執行期的變數決定
09/06 17:48, 1F

09/06 17:49, , 2F
http://pastie.org/2490587 這種感覺嗎?
09/06 17:49, 2F

09/06 17:51, , 3F
如果你的var是在執行的時候才決定,那就無解
09/06 17:51, 3F

09/06 17:52, , 4F
如果我可以讓var變數比跑struct A還早知道 這樣可以解嗎
09/06 17:52, 4F

09/06 17:53, , 5F
據我所知,你沒辦法在「執行的時候」改變struct有什麼
09/06 17:53, 5F

09/06 17:54, , 6F
除非準備兩份實作並且用動態載入...(好麻煩XD)
09/06 17:54, 6F

09/06 17:56, , 7F
請問我的var若是在更早的xxx.c就可抓到呢
09/06 17:56, 7F

09/06 17:56, , 8F

09/06 17:56, , 9F
我比較好奇的是你的動機是什麼,想省空間嗎...?
09/06 17:56, 9F

09/06 18:00, , 10F
因為Code的架構很大又有不同的vendor 這樣比較好改
09/06 18:00, 10F

09/06 18:01, , 11F
除非你的變數能確定的時間比編譯完成的時間早
09/06 18:01, 11F

09/06 18:04, , 12F
我的var變數是在bootloader, kernel才會用到structA
09/06 18:04, 12F

09/06 18:05, , 13F
這樣算很早吧 同時我的kernel也可以取得此var變數
09/06 18:05, 13F

09/06 18:05, , 14F
就算在 bootloader, 程式也是已經 compile 好了的
09/06 18:05, 14F

09/06 18:06, , 15F
除非你要從 bootloader 去編譯 kernel
09/06 18:06, 15F

09/06 18:06, , 16F
不知道要怎麼改比較好
09/06 18:06, 16F

09/06 18:06, , 17F
只要是在「編譯完成後」想要再去改都會很麻煩
09/06 18:06, 17F

09/06 18:10, , 18F
可以說明一下為什麼要根據runtime資訊決定要宣告什麼?
09/06 18:10, 18F

09/06 18:12, , 19F
要不就是用好人james大說的動態載入...
09/06 18:12, 19F

09/06 18:12, , 20F
bootloader 不知道支不支援動態載入...這邊我就不熟了...
09/06 18:12, 20F

09/06 18:15, , 21F
看他的需求的話... kernel 做應該 ok 啦~
09/06 18:15, 21F

09/06 21:01, , 22F
要不要嘗試 裏面寫個呼叫編譯器重編code XD
09/06 21:01, 22F
文章代碼(AID): #1EPUhwxm (C_and_CPP)
文章代碼(AID): #1EPUhwxm (C_and_CPP)