[問題] Run Time選擇Header file的可能?

看板C_and_CPP作者 (爆肝人生)時間8年前發表 (2016/10/11 07:03), 8年前編輯推噓12(12015)
留言27則, 17人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) DOS 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 是否能在Run time時由條件式去決定要include header file? Compilier time 我沒問題. 原由是我現在開發一個tool要跨Project. 裡面吃了別的部門生成的header file. 只是裡面有的許多相同的define name但給不同的值. Ex: Project1.h #define inputWindow1 0x100 Project2.h #define inputWindow1 0x200 有沒有類似這樣這樣的做法(語法是錯的, 不要噹我XDD) if(input == 1) #include <lib\project1.h> else #include <lib\project2.h> 補充說明(Supplement): 我google了C dynamic include header file. 但找了很久都沒有解答. 大多回答#ifdef, 但這是compiler time決定. 看有沒有神人遇過類似的需求. 感謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.196.154.3 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1476169406.A.5E5.html

10/11 15:21, , 1F
#ifdef 就好了啊
10/11 15:21, 1F
現在code就是用#ifdef去吃. 但Run Time執行時, Project1/Project2 就要分二隻檔案跑了.

10/11 15:24, , 2F
可以考慮用 env var 或是 config 檔案
10/11 15:24, 2F
謝謝, 正在研究中.

10/11 15:28, , 3F
編兩隻程式 再寫一個tool runtime決定要呼叫哪個程式
10/11 15:28, 3F
呼叫外部程式沒實作過.... 或許是條路啦XDD 感謝.

10/11 15:48, , 4F
如果都是這種ID類的資料,或許可以建個表格
10/11 15:48, 4F

10/11 15:48, , 5F
runtime選擇就代表compile的時候兩份資料都要編譯進去
10/11 15:48, 5F
表格化是我想的另一條路. 這幾個Header file都上萬行. 但格式固定. 可以給Editor去處理. 只是現在code 在Project1已經大量引用Project1.h的define. 但表格化要處理一次#define. 一整個沒頭緒.

10/11 15:54, , 6F
這種就 runtime 從外部讀 要不然就把會動到的地方切開各自編
10/11 15:54, 6F

10/11 15:55, , 7F
如果就固定不便的話就可以像樓上那樣全編 執行時再傳參數
10/11 15:55, 7F

10/11 15:56, , 8F
10/11 15:56, 8F
有想過fprintf從外面讀. 但同上回答, 現在整個頭大.

10/11 15:56, , 9F
include就是編譯期的行為 怎麼可能runtime改呢
10/11 15:56, 9F

10/11 15:56, , 10F
一定是用某些work around去做
10/11 15:56, 10F
我就是想了好幾天都無解...

10/11 16:06, , 11F
建表倒不是問題,現在的問題是兩個 .h 定義一樣的symbol
10/11 16:06, 11F

10/11 16:07, , 12F
要求另外兩個部門改名是政治問題了
10/11 16:07, 12F

10/11 16:08, , 13F
所以 compile 兩支程式是最省力不用碰政治的作法...
10/11 16:08, 13F

10/11 16:10, , 14F
此外我還擔心暗藏其他問題,比如同名不同實作的function
10/11 16:10, 14F
Bingo!! 不過還好這問題都是出在同Function. 因為Spec開的不同, 所以這同名搬家問題會跟著Project跑. 新人時沒想過這問題. 現在新的Project來了真的要搞死我了. compiler time build 二個tool怕有個問題. 就是user不知道那個Project對那個tool. 勢必得先做個先導的tool.. call外部程式又沒做過. 再google 看看吧.

10/11 19:41, , 15F
在程式裏面塞個 Tiny C Compiler 不知道有沒有用 XD
10/11 19:41, 15F
google一下沒答案. 可能方向錯了~ 不過感謝.

10/11 20:08, , 16F
這感覺用dynamic load可解決
10/11 20:08, 16F
google過了, 試了一下好像還是不行. 感謝.

10/11 20:51, , 17F
你有 a、b 兩個語境要切換,那就 include 另一個 header
10/11 20:51, 17F

10/11 20:51, , 18F
,這個 header 負責 extern 所有變數,然後把原來的兩個
10/11 20:51, 18F

10/11 20:51, , 19F
header #define 改成變數,然後編成兩個 dll,執行的時
10/11 20:51, 19F

10/11 20:51, , 20F
候再選擇動態連結那個就好
10/11 20:51, 20F
這個好像有點難, 我還沒理解怎麼做. 最近這個Project被Pending住, 回頭再看這麼做.

10/11 21:31, , 21F
為啥不用exec配兩個編譯好的就好
10/11 21:31, 21F
這個意思不太懂. 是指compiler二隻來做嗎? 是怕User端會有版本的問題.

10/11 23:55, , 22F
不就在包一層...
10/11 23:55, 22F
包一層?

10/12 11:47, , 23F
把c寫得像oo
10/12 11:47, 23F
像oo?

10/12 13:31, , 24F
這種用namespace可能容易點吧
10/12 13:31, 24F
剛google一下namespace, 晚點試看看.

10/12 14:01, , 25F
他的環境是 dos
10/12 14:01, 25F

10/16 00:15, , 26F
太屌了.沒注意到是 dos 環境.可以知道是什麼 compiler嗎?
10/16 00:15, 26F
Watcom C

10/17 00:07, , 27F
dos!?????
10/17 00:07, 27F
我的測試是很硬體底層的東西, DOS管制比較少, 會比較方便. ※ 編輯: viajimmy (113.196.154.3), 10/19/2016 11:14:41
文章代碼(AID): #1N_8w-Nb (C_and_CPP)