Me preguntaba si hay algún problema al pasar un puntero a putchar, o cualquier otra función estándar que se pueda implementar como una macro, a un función que acepta un puntero a la función. A continuación hay un ejemplo de lo que estoy haciendo.Pasando un puntero a putchar a una función que recibe un int (*) (int)
#include <stdio.h>
static int print(const char *s, int (*printc)(int))
{
int c;
while (*s != '\0') {
if ((c = printc(*s++)) < 0)
return c;
}
return printc('\n');
}
int main(void)
{
print("Hello, world", putchar);
return 0;
}
que no tienen ningún problema en la compilación de este con GCC y Sonido metálico bajo GNU/Linux, así como GCC bajo OpenBSD. Me pregunto si tendrá el mismo comportamiento en cualquier otra implementación compatible estándar, ya que putchar se puede implementar como una macro. He buscado a través del estándar, particularmente las secciones sobre punteros de función y putchar, y no he podido encontrar nada que especifique si esto es legal o no.
Gracias.
Si su "función" es en realidad una macro, entonces su código no se compilará. –
No estoy seguro si esto cumple con las normas, pero con 'gcc' esto parece ser el comportamiento esperado: http://gcc.gnu.org/onlinedocs/cpp/Function_002dlike-Macros.html – RageD
Haga que * solo * una macro .. –