首页 > 解决方案 > 检查当前是否在处理时包含文件

问题描述

我想知道是否可以将 C 库作为单个文件分发,其中根据正在使用的文件来表达相关文件的不同部分。这个问题的灵感来自此处GenericList.inc的 Free Pascal Wiki 上的示例(警告:无 https)和此处的单文件 C 和 C++ 库列表,其中似乎没有任何专门用于 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当所讨论的文件是当前包含的文件的“根”时,这是错误的,否则是正确的。

/* 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确实依赖于荒谬的黑客?

标签: cc-preprocessor

解决方案


推荐阅读