Подтвердить что ты не робот

Конкатенация строк в макросах - С++

Самый простой способ конкатенации строк, определенных в макросах. т.е. псевдокод, который я ищу, будет выглядеть следующим образом:

#define ROOT_PATH "/home/david/"
#define INPUT_FILE_A ROOT_PATH+"data/inputA.bin"
#define INPUT_FILE_B ROOT_PATH+"data/inputB.bin"
...
#define INPUT_FILE_Z ROOT_PATH+"data/inputZ.bin"

Единственный способ, которым я знаю, - использовать strcat в коде или использовать класс string, а затем метод c_str, но он может стать беспорядочным, когда у меня много входных файлов. Я хотел бы просто использовать INPUT_FILE_A и т.д. Напрямую и не иметь много локальных переменных. Есть ли хороший способ сделать это?

Спасибо.

4b9b3361

Ответ 1

Компилятор автоматически объединяет соседние строки:

#define ROOT_PATH "/home/david/"
#define INPUT_FILE_A ROOT_PATH "data/inputA.bin"

Или более общий:

#define INPUT_FILE_DETAIL(root,x) root #x
#define INPUT_FILE(x) INPUT_FILE_DETAIL(ROOT_PATH "data/", x)

Ответ 2

Шелл "ел" кавычки. Таким образом, следующая строка должна была использовать:

-DROOT_PATH=\"some-string"\