У меня есть два макроса препроцессора «A» и «B», которые необходимо объединить в список инициализаторов. Например .:Объединение необязательных макросов для формирования списка
MyType obj = { A, B };
Однако А может быть пустым, одно значение, или список, и В может быть пустым или одно значение. Поэтому проблема заключается в том, как избежать вставки ненужной запятой, т. Е. Когда A или B пуст.
Так решение псевдо-CPP-код будет:
#if EMPTY(B)
MyType obj = { A };
#else
MyType obj = { A, B };
#endif
Но как написать тест EMPTY()
, что для #define A
это правда, для #define A 1,2,3
это ложь? (Я ошибался со вспомогательными макросами, не получая ничего похожего на компиляцию ...)
Обратите внимание, что макросы исходят из внешнего механизма конфигурации, поэтому решение, ориентированное на CPP, похоже на естественное соответствие, а не неизбежное справедливый вопрос: «Почему вы делаете это с помощью макросов?»
Я чувствую, что суть этого вопроса заключается в том, как проверить, является ли аргумент макроса пустым. Я не думаю, что это возможно, к сожалению. – tenfour