Guarda ti consiglio di usare una sintassi tipo quella del printf, cioè fare così:
codice:
#include <stdarg>

int compare(int i, ...)
{
	int r;
	va_list p;
	va_start(p, i);
	switch(i)
	{
		case 1: r = strcmp(va_arg(p, char*), va_arg(p, char*)); break;
 		case 2: r = (va_arg(p, int) - va_arg(p, int)); break;
	}
	va_end(p);
	return r;
}
Che io ricordi stdarg è C, ed è decisamente il modo più elegante ed efficiente.