代码之家  ›  专栏  ›  技术社区  ›  Greg Nisbet

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

  •  0
  • Greg Nisbet  · 技术社区  · 5 年前

    我想知道是否可以将C库作为一个单独的文件分发,其中所讨论的文件的不同部分取决于所使用的文件。这个问题的灵感来自 GenericList.inc 免费Pascal Wiki上的示例 here (警告:没有HTTPS)和单文件C和C++库的列表 here 它不具有任何专用于C的单个文件库。有许多库在C++中仅使用C可编译API编写。

    例如,一个非常简单的库有一个无用的函数 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 ,我们可以将其合并为一个文件以便于分发。

    这里的想法是 我是你的来源吗 当所讨论的文件是包含的文件的当前树状结构的“根”时为false,否则为true。

    /* strawman.c */
    int add(int x, int y);
    
    #ifndef AM_I_BEING_SOURCED
    
    int add(int x, int y)
    {
      return x + y;
    }
    
    #endif
    

    有没有办法伪造/仿效 我是你的来源吗 例如,这不依赖于一个荒谬的黑客式行号算法吗?

    有没有办法伪造/仿效 我是你的来源吗 那个 依靠一个荒谬的黑客?

    0 回复  |  直到 5 年前