Конкатенация строк в макросах - C ++ - PullRequest
17 голосов
/ 16 ноября 2009

Какой самый простой способ объединить строки, определенные в макросах. то есть искомый псевдокод будет выглядеть так:

#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 или использовать строковый класс, а затем метод c_str, но он может запутаться, когда у меня много входных файлов. Я хотел бы просто использовать INPUT_FILE_A и т. Д. Напрямую и не иметь много локальных переменных. Есть ли хороший способ сделать это?

Спасибо.

Ответы [ 2 ]

45 голосов
/ 16 ноября 2009

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

#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)
0 голосов
/ 21 июля 2016

Shell «кушала» цитаты. Итак, следующую строку пришлось использовать:

-DROOT_PATH=\"some-string"\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...