или же

аюсь выяснить, как создать переменную строку для оператора #include с помощью GCC.

Идея состоит в том, что для каждого написанного мной исходного модуля я хочу включить в качестве заголовка динамически генерируемыйC источник, который был создан ранее в процессе сборки.

Создание этого файла не является проблемой. В том числе и это, к сожалению, есть.

То, что у меня пока есть, - это: identity.h:

// identities.h

# define PASTER2(str)  #str
# define PASTER(str)   PASTER2(str ## .iden)
# define EVALUATOR(x)  PASTER(x)

# define IDENTITIES_FILE EVALUATOR(__FILE__)
# include IDENTITIES_FILE

В идеале это можно использовать так (main.c):

//main.c

# include "identities.h"

int main() {return 0;}

Который был бы расширен за один проход препроцессором перед компиляцией, чтобы привести к:

//main.c (preprocessed)

# include "main.c.iden"

int main() {return 0;}

Два уровня косвенности, которые я использую (PASTER и EVALUATOR), являются результатомэто Почта.

К сожалению, это не работает, и я остаюсь с ошибкой:

obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>

Я думаю, проблема в том, что в операторе включения отсутствуют кавычки. Есть идеи?

Ответы на вопрос(5)

Ваш ответ на вопрос