開發平台(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 就好了啊
可以考慮用 env var 或是 config 檔案
編兩隻程式 再寫一個tool runtime決定要呼叫哪個程式
如果都是這種ID類的資料,或許可以建個表格runtime選擇就代表compile的時候兩份資料都要編譯進去
作者:
CP64 (( ̄▽ ̄#)﹏﹏)
2016-10-11 15:54:00這種就 runtime 從外部讀 要不然就把會動到的地方切開各自編如果就固定不便的話就可以像樓上那樣全編 執行時再傳參數變
作者:
chchwy (mat)
2016-10-11 15:56:00include就是編譯期的行為 怎麼可能runtime改呢一定是用某些work around去做
建表倒不是問題,現在的問題是兩個 .h 定義一樣的symbol要求另外兩個部門改名是政治問題了所以 compile 兩支程式是最省力不用碰政治的作法...此外我還擔心暗藏其他問題,比如同名不同實作的function
在程式裏面塞個 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,執行的時候再選擇動態連結那個就好
作者:
final01 (牛頓運動定律)
2016-10-11 23:55:00不就在包一層...
作者: 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:00dos!?????