Макрозамена в директиве #include

Я хотел бы использовать директиву #include с именем файла, которое передается как макрос, определяемый извне.

например.

#include #FILE".h"

где FILE будет определяться как строка MyFile (без кавычек), в результате чего

#include "MyFile.h"

Оператор строки # не может использоваться здесь, поскольку символ FILE не является аргументом макроса. Я пробовал другие подходы, но безрезультатно.

Вы видите решение?

Ответ 1

Строковая литеральная конкатенация происходит с двумя фазами перевода после #include -directives; ваш подход не может работать. Вместо этого попробуйте что-то по строкам

#define STRINGIZE_(a) #a
#define STRINGIZE(a) STRINGIZE_(a)

#define MYFILE stdio
#include STRINGIZE(MYFILE.h)

int main() {
    printf("asdf");
}

Демо.