[问题] 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