#define и #include порядок компиляции - PullRequest
0 голосов
/ 20 июня 2019

Я пытался прочитать файл во время компиляции.Мой код, как показано ниже

#define STR(x) #x
const char *fileContent = STR(
       #include "config.txt"
);

Содержимое config.txt

ABC

DEF

Что я ожидалзначение fileContent равно

ABC

DEF

, но я получил

# include "config.txt"

для fileContent.Кажется, порядок замены символов в Visual C ++ равен #define, а затем #include.Могу ли я изменить порядок на #include, затем #define?Или какие-либо предложения для чтения файла на char * во время компиляции?

1 Ответ

2 голосов
/ 20 июня 2019

#include является директивой препроцессора.

#define также является директивой препроцессора.

Вы не можете вставлять одно в другое. Токены внутри аргумента макроса не интерпретируются как дальнейшие директивы препроцессора. Это имеет мало общего с «порядком» и больше с вложенностью.

Вы не можете просто добавить #include в строковый литерал, но есть способы получить то, что вы хотите .

Это может стать проще в будущих версиях C ++, если предложение std::embed получит свое распространение.

...