我有一个程序,根据用户输入,#includes
一个标题headerA.h
或另一个headerB.h
我希望标题在那里直到程序结束。
headerA
和headerB
定义具有相同名称但具有不同字段的结构,并且我无法将两个文件合并为一个,并且无法更改{{{ {1}}和headerA
正在使用。
有没有办法解决这个问题?
答案 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,反之亦然