如何根据用户输入每次#include一个不同的文件?

时间:2013-05-07 07:06:23

标签: c include

我有一个程序,根据用户输入,#includes一个标题headerA.h或另一个headerB.h我希望标题在那里直到程序结束。

headerAheaderB定义具有相同名称但具有不同字段的结构,并且我无法将两个文件合并为一个,并且无法更改{{{ {1}}和headerA正在使用。

有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:2)

预处理器宏:

#if defined(USE_HEADERA)
# include "headerA.h"
#elif defined(USE_HEADERB)
# include "headerB.h"
#else
# error must define USE_HEADERA or USE_HEADERB
#endif

如果您有GCC,那么您告诉预处理器使用GCC -D选项选择哪个:

$ gcc -DUSE_HEADERA myfile.c -o myprogram

但是,如果您想在执行期间执行 runtime ,那是不可能的。 #include是预处理程序指令,预处理程序仅作为编译的一部分运行。

答案 1 :(得分:1)

虽然可以有条件地包含文件,但似乎不可能在运行时进行此更改。请参阅此answer。 if语句仅在运行时之前有效。

答案 2 :(得分:0)

我不认为这是可能的,因为您的#include在编译之前已解决,即在预处理期间。因此,无法在运行时更改它们。

但您可以通过在编译期间定义宏来尝试条件编译。

#ifdef HEADERA
  #include <headerA>
#ifdef  HEADERB
  #include <headerA>

编译gcc时

$ gcc prog.c -DHEADERA包含headerA,反之亦然