c - 检查当前是否在处理时包含文件
问题描述
我想知道是否可以将 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
确实依赖于荒谬的黑客?
解决方案
推荐阅读
- visual-studio-code - 未绑定的类路径容器:带有处理的项目“”中的“JRE 系统库 [adoptopenjdk-11]”
- asp.net-mvc - 如何获取 cookie 时间并执行自动登录
- spring - 请求“GET /sw.js”与“POST /login Spring Security”不匹配
- python-3.x - 自动打开文件夹中新添加的文件的脚本
- typescript - react-native typescript babel-plugin-module-resolver 在嵌套文件夹中找不到模块
- c++ - Json::Value 作为私有类成员
- c++ - 输入是一个三位数字。打印其数字的算术平均值
- python - 如何在 python-binance 中获取多个硬币的历史数据?
- javascript - 如何根据值将颜色线更改为渐变颜色
- nginx - 没有指定子目录的 Nginx 重定向有效,但不更改 url