gcc поддерживает макросы подсчета аргументов с нулевыми аргументами в соответствии с соглашением ## __VA_ARGS__
. Следующие работы скомпилированы с gcc:
#include <stdio.h>
#define NARGS(...) __NARGS(0, ## __VA_ARGS__, 5,4,3,2,1,0)
#define __NARGS(_0,_1,_2,_3,_4,_5,N,...) N
int main()
{
printf("%d\n", NARGS()); // prints 0
printf("%d\n", NARGS(1)); // prints 1
printf("%d\n", NARGS(1, 2)); // prints 2
return 0;
}
Есть ли эквивалент для VisualC++, который будет работать с макросами без аргументов? Нестандартные расширения или приемы принимаются.
РЕДАКТИРОВАТЬ: Исправлен пример для работы с расширениями GCC и компилятором C++.