La utilización de un nombre de función sin () no genera código
Actualización: noviembre 2007
Cuando se utiliza sin paréntesis un nombre de función declarado en el programa, el compilador no produce código. Esto ocurrirá independientemente de si la función utiliza o no parámetros, ya que el compilador calcula la dirección de la función; sin embargo, como el operador de llamada a la función "()" no está presente, no se realiza ninguna llamada. El resultado es similar al siguiente:
// compile with /Wall to generate a warning
int a;
a; // no code generated here either
En Visual C++, no se generan resultados de diagnóstico ni al utilizar el nivel 4 de advertencia. No se emite ninguna advertencia y no se produce código.
El código de ejemplo siguiente se compila (con una advertencia) y vincula correctamente sin error, pero no produce código relacionado con funcn( ). Para que esto funcione correctamente, debe agregar el operador de llamada a función "()".
#include <stdio.h>
void funcn();
int main() {
funcn; /* missing function call operator;
call will fail. Use funcn() */
}
void funcn() {
printf("\nHello World\n");
}