Después de leer sobre VA_NARGpegar simbólico en C
me trató de poner en práctica la sobrecarga de funciones dependiendo del número de argumentos en C el uso de macros. Ahora el problema es:
void hello1(char *s) { ... }
void hello2(char *s, char *t) { ... }
// PP_NARG(...) macro returns number of arguments :ref to link above
// does not work
#define hello(...) hello ## PP_NARG(__VA_ARGS__)
int main(void)
{
hello("hi"); // call hello1("hi");
hello("foo","bar"); // call hello2("foo","bar");
return 0;
}
He leído this de C-FAQ. Pero todavía no podía conseguir que funcione ...
"más o menos" de hecho. Se necesita un nivel más de indirección para que funcione. –
@John: sí, gracias. Siempre uso mi propia versión de macro de pegado para eso, así que me es difícil recordar cuántos niveles de direccionamiento indirecto necesitas si solo tienes '##'. Adapte mi respuesta en consecuencia. –
Gracias que funciona. pero HOLA ("foo") da hello1; no hello1 ("foo"). Pero tengo la idea ... – Nyan