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

作者: viajimmy (爆肝人生)   2016-10-11 15:03:24
開發平台(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決定.
看有沒有神人遇過類似的需求.
感謝.
作者: Clangpp (Clang++)   2016-10-11 15:21:00
#ifdef 就好了啊
作者: nowar100 (拋磚引玉)   2016-10-11 15:24:00
可以考慮用 env var 或是 config 檔案
作者: shadow0326 (非議)   2016-10-11 15:28:00
編兩隻程式 再寫一個tool runtime決定要呼叫哪個程式
作者: james732 (好人超)   2016-10-11 15:48:00
如果都是這種ID類的資料,或許可以建個表格runtime選擇就代表compile的時候兩份資料都要編譯進去
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2016-10-11 15:54:00
這種就 runtime 從外部讀 要不然就把會動到的地方切開各自編如果就固定不便的話就可以像樓上那樣全編 執行時再傳參數變
作者: chchwy (mat)   2016-10-11 15:56:00
include就是編譯期的行為 怎麼可能runtime改呢一定是用某些work around去做
作者: Schottky (順風相送)   2016-10-11 16:06:00
建表倒不是問題,現在的問題是兩個 .h 定義一樣的symbol要求另外兩個部門改名是政治問題了所以 compile 兩支程式是最省力不用碰政治的作法...此外我還擔心暗藏其他問題,比如同名不同實作的function
作者: ronin728 (浪人)   2016-10-11 19:41:00
在程式裏面塞個 Tiny C Compiler 不知道有沒有用 XD
作者: firejox (Tangent)   2016-10-11 20:08:00
這感覺用dynamic load可解決
作者: CoNsTaR ((const *))   2016-10-11 20:51:00
你有 a、b 兩個語境要切換,那就 include 另一個 header,這個 header 負責 extern 所有變數,然後把原來的兩個header #define 改成變數,然後編成兩個 dll,執行的時候再選擇動態連結那個就好
作者: steve1012 (steve)   2016-10-11 21:31:00
為啥不用exec配兩個編譯好的就好
作者: final01 (牛頓運動定律)   2016-10-11 23:55:00
不就在包一層...
作者: soheadsome (師大狗鼻哥)   2016-10-12 11:47:00
把c寫得像oo
作者: TeaEEE (愛不趴 不愛趴)   2016-10-12 13:31:00
這種用namespace可能容易點吧
作者: descent (「雄辯是銀,沉默是金」)   2016-10-12 14:01:00
他的環境是 dos
作者: EdisonX (卡卡獸)   2016-10-16 00:15:00
太屌了.沒注意到是 dos 環境.可以知道是什麼 compiler嗎?
作者: Caesar08 (Caesar)   2016-10-17 00:07:00
dos!?????

Links booklink

Contact Us: admin [ a t ] ucptt.com