#define STRIP0 0
#define STRIP1 1
#define STRIP2 2
#define STRIP3 3
#define PINS0 2,3,4
#define PINS1 5,6,7
#define PINS2 8,9,10
#define PINS3 11,12,13
#define PINS(STRIP) { (STRIP) == (STRIP0) ? PINS0 :\
(STRIP) == (STRIP1) ? PINS1 :\
(STRIP) == (STRIP2) ? PINS2 :PINS3}
теперь, если когда я вызвать функцию, которая принимает 3 аргумента все типа междунар foo(int,int,int);
как это foo(PINS1);
то функция компилируется и работает, как и ожидалось (все аргументы передаются как если #define был заменен на «5,6,7»)Использование макросов для выбора аргументов функции
, но если я использую макрос для выбора набора контактов, например foo(PINS(STRIP1));
, тогда выбор аргумента будет угасать. в этом конкретном случае список ошибочных аргументов становится «7,12,13», а для foo(PINS(STRIP0));
он становится «4,12,13», есть образец, который я вижу, но у меня нет опыта, чтобы рассказать и исправить то, что происходит при компиляции время.
Если вы используете макрос функций типа «PINS», у вас есть две проблемы: первая - фигурные скобки, которые у вас есть вокруг всего выражения. Во-вторых, вместо передачи нескольких аргументов вы передаете один аргумент, потому что тогда запятая становится и разделителем аргументов, а выражением для запятой. Вы должны пересмотреть свое использование макросов, возможно, вместо этого используется оболочка 'inline'? Или, по крайней мере, изменить макрос, возможно, взять функцию в качестве аргумента и вызвать вызов внутри макроса «тело»? –
Почему бы вам просто не написать 'if/else' – Danh
@Someprogrammerdude, я удалю фигурные фигурные скобки и отредактирую вопрос, но это не повлияет на результат. , когда я делаю это 'foo (PINS1);' (как указано в вопросе), функция принимает 3 числа в качестве самих аргументов, что заставило меня поверить, что запятая как выражение не происходило, а компилятор признал, что есть 3 аргумента и что почему это продолжалось. Это причина, по которой я думал, что макрос, который выбирает 'PINS0' или' PINS1', будет работать, но это не так. Ваше предложение о том, чтобы функция как аргумент в макросе, вероятно, то, что предлагает krzaq –