Вместо того, чтобы пытаться использовать макрос для настройки и выполнения этих вызовов, я, вероятно, рассмотрю возможность изменения интерфейса на dash()
, чтобы использовать varargs:
#include <stdarg.h>
void dash( char c, ...)
{
// ...
}
int main() {
dash( '+', 1, 3, 2, -1); // note: negative number indicates
// the end of the list of numbers
return 0;
}
Использование varargs - не лучшая вещь в мире (их сложно использовать и они небезопасны), но я думаю, что это будет лучше, чем макрокоманда, которую вы пытаетесь создать.
Кроме того, помните, что даже если вы придерживаетесь своего текущего интерфейса для dash()
и придумали макрос, который делает то, что вы хотите, вам все равно нужен способ указать конец последовательности чисел, которые нужно передать в dash()
. В противном случае у dash нет возможности узнать, когда он достиг конца массива. У вас есть несколько вариантов:
- использовать значение часового, например, 0, -1 или любое отрицательное число (как в примере vararg выше)
- передать число элементов в массиве в качестве другого аргумента
- устанавливает размер массива как часть интерфейса
dash()
. В вашем примере dash()
может потребовать передачи массива из 3-х целых чисел. Ни больше, ни меньше (на самом деле больше будет в порядке - они просто не будут использоваться). Если бы вы сделали это, исправление вашего макроса было бы намного проще, но я подозреваю, что вы не хотите, чтобы dash вел себя.