Мне интересно, возможно ли распространять библиотеку C в виде одного файла, где различные части рассматриваемого файла выражены в зависимости от используемого файла.Этот вопрос вдохновлен примером GenericList.inc
на Free Pascal Wiki здесь (предупреждение: нет https) и списком отдельных файлов C и C ++ здесь , который не отображаетсяиметь какие-то отдельные файловые библиотеки специально для 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
, мы могли бы объединить ее в один файл для удобства распространения.
Идея состоит в том, что 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
, что делает полагаться наабсурдный хак?