Я пытаюсь понять, как создать переменную строку для оператора #include с помощью GCC.
Идея состоит в том, что для каждого написанного мной исходного модуля я хочу включить в качестве заголовка динамически сгенерированный исходный код C, который был создан ранее в процессе сборки.
Создать этот файл не проблема. В том числе он, к сожалению, есть.
Что у меня есть до сих пор (identities.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), являются результатом this< /а> сообщение.
К сожалению, это не работает, и я остаюсь с ошибкой:
obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>
Я думаю, проблема в том, что в операторе include отсутствуют кавычки. Любые идеи?