Мне нужно использовать круглые скобки в моих фактических параметрах для макроса, но круглые скобки, похоже, изменяют поведение запятой, разделяющей параметры макроса.
Я заставил свой препроцессор сбрасывать свои выходные данные в текстовый файл, чтобы я мог видеть, что он производит.
Затем я провел базовый тест, чтобы подтвердить поведение.
#define MACRO_TEST_1( X , Y ) X && Y
MACRO_TEST_1 ( A , B )
// Desired result: A && B
// Actual result: A && B
MACRO_TEST_1 ( ( C , D ) )
// Desired result: ( C && D )
// Actual result: ( C , D ) &&
// Warning: "not enough actual parameters for macro 'MACRO_TEST_1'"
Похоже, что добавление открывающей скобки к первому параметру и закрывающей скобки ко второму параметру заставляет препроцессор рассматривать запятую как часть первого параметра, и поэтому предполагается, что я не предоставил второй параметр вообще.
Об этом свидетельствует предупреждение, а также вывод препроцессора, который ничего не показывает после &&
.
Итак, мой вопрос: как я могу сказать препроцессору, что запятая разделяет параметры, даже если в параметрах есть круглые скобки?
Я пытался экранировать круглые скобки или запятую, но это не имело значения.
(Тот же результат, только со вставленным escape-символом в вывод препроцессора.)
func(1, 2)
— это 2 аргумента,func((1, 2))
— только один аргумент. - person Barmar   schedule 14.10.2016