проверить, включен ли файл в данный момент во время процесса - PullRequest
0 голосов
/ 26 февраля 2019

Мне интересно, возможно ли распространять библиотеку 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, что делает полагаться наабсурдный хак?

...