Макрозамена в директиве #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");
}
Демо.