我有一个程序,根据用户输入,#includes
一个headerA.h
或另一个标题headerB.h
我希望标题一直存在到程序结束。
headerA
并headerB
定义具有相同名称但具有不同字段的结构,并且我无法将两个文件合并为一个,也无法从正在使用的库中更改任何其他headerA
内容headerB
。
有没有办法解决这个问题?
预处理器宏:
#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
但是,如果您想在执行期间执行它,那是不可能的。#include
是预处理器指令,预处理器仅作为编译的一部分运行。
尽管可以有条件地包含文件,但似乎不可能在运行时进行此更改。请参阅此答案。if 语句仅在运行时之前有效。
我认为这是不可能的,因为您#include
的 s 在编译之前已解决,即在预处理期间。因此,在运行时无法更改它们。
但是您可以通过在编译时定义宏来尝试条件编译。
#ifdef HEADERA
#include <headerA>
#ifdef HEADERB
#include <headerA>
在编译 gcc 时
$ gcc prog.c -DHEADERA
包括 headerA 或反之亦然