Присоединение к строковому макросу - PullRequest
0 голосов
/ 22 октября 2018

У меня есть программа, которая предлагает различные функции в зависимости от определений времени компиляции.Я определил OPT_STRING, который содержит все возможные аргументы командной строки (для использования с getopt_long).Я искал умного, чтобы изменить его определение в зависимости от определений времени компиляции.Я придумал это:

#define OPT_STRING "haspvb"

#ifdef HAVE_WIFI
#define OPT_STRING OPT_STRING "mw" // => "haspvb" "mw"
#endif // HAVE_WIFI

#ifdef HAVE_IMEI
#define OPT_STRING OPT_STRING "i" // => "haspvb" "mw" "i" or "haspvb" "i"
#endif // HAVE_IMEI

Однако, это приводит к ошибке компиляции:

error: "OPT_STRING" redefined

Есть ли какая-то «макро-магия» для достижения того, что япытаешься сделать?

1 Ответ

0 голосов
/ 22 октября 2018

Вы не можете «добавить» макрос, это просто невозможно.

В качестве возможного решения вы можете определить различные макросы, а затем использовать их вместе для определения окончательного варианта.OPT_STRING макрос:

#define OPT_STRING_BASE "haspvb"

#ifdef HAVE_WIFI
#define OPT_STRING_WIFI "mw"
#else
#define OPT_STRING_WIFI
#endif // HAVE_WIFI

#ifdef HAVE_IMEI
#define OPT_STRING_IMEI "i"
#else
#define OPT_STRING_IMEI
#endif // HAVE_IMEI

#define OPT_STRING (OPT_STRING_BASE OPT_STRING_WIFI OPT_STRING_IMEI)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...