1

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

headerAheaderB 定义具有相同名称但具有不同字段的结构,并且我无法将两个文件合并为一个,也无法从正在使用的库中更改任何其他headerA内容headerB

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

4

3 回答 3

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

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

于 2013-05-07T07:10:42.323 回答
1

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

于 2013-05-07T07:14:24.303 回答
0

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

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

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

在编译 gcc 时

$ gcc prog.c -DHEADERA包括 headerA 或反之亦然

于 2013-05-07T07:14:27.943 回答