¿Por qué la eliminación de la palabra clave “int” no genera ningún error en el siguiente código?

Progtwig de ejemplo 1. Note int en typedef en la primera línea:

 typedef int (*p)(); //Statement 1 int foo() { return 0; } int main() { int c; pq=foo; c=(*q)(); printf("%d",c); return 0; } Output:0 

Progtwig de ejemplo 2. Todos iguales, pero sin int en la primera línea:

 typedef (*p)(); //Statement 1 int foo() { return 0; } int main() { int c; pq=foo; c=(*q)(); printf("%d",c); return 0; } Output:0 

La salida es igual en ambos casos. No genera ningún error. ¿Por qué?

Siempre debe publicar el comstackdor (y la versión) que está utilizando en preguntas como esta.

Supongo que está utilizando un comstackdor C89 que permite int implícito.

Si comstackste en el modo C99, obtendrías un diagnóstico, pero en C89 y C estándar, la palabra clave int era opcional.

Así:

 extern a; main(argc, argv) char **argv; { auto i; ... return 0; } 

y se permitieron otros estilos de encoding que son una abominación según los estándares modernos. (La variable a es un int ; el argumento argc es un int ; la variable i es un int ; el tipo de retorno de main() es un int .) Tenga en cuenta que hasta C99, se suponía que no debía omitir el return 0; de main() ; si lo hizo, el valor devuelto al entorno de llamada no estaba definido.