在处理时检查当前是否包含文件

时间:2019-02-26 03:14:53

标签: c c-preprocessor

我想知道是否可以将C库分发为单个文件,其中根据所使用的文件来表达所讨论文件的不同部分。这个问题的灵感来自免费Pascal Wiki here上的GenericList.inc示例(警告:否https)以及单个文件C和C ++库here的列表,该列表似乎没有任何单个专门用于C的文件库。尽管有很多库都是使用C ++兼容的API用C ++编写的。

例如,一个具有一个无用函数add的非常简单的库可能看起来像这样:

/* foo.h */
int add(int x, int y);

和其他文件

/* foo.c */
#include "foo.h"

int add(int x, int y)
{
  return x + y;
}

如果有一个神奇的预处理器变量AM_I_BEING_SOURCED,我们可以将其合并为一个文件,以方便分发。

这里的想法是,当所讨论的文件是所包含文件的当前树状结构的“根”时,AM_I_BEING_SOURCED为假,否则为true。

/* strawman.c */
int add(int x, int y);

#ifndef AM_I_BEING_SOURCED

int add(int x, int y)
{
  return x + y;
}

#endif

例如,有没有一种方法可以伪造/模拟AM_I_BEING_SOURCED,而这种伪造/伪造AM_I_BEING_SOURCED并不像行号算术那样依赖荒谬的hack?

是否有一种方法可以伪造/模仿{em>确实依赖于荒谬的骇客行为的{{1}}?

0 个答案:

没有答案