En C: Diferencia entre main () y int main ()

Posible duplicado:
diferencia entre main (void) y main () en c

Sé que esto es súper básico y algunos otros hilos ya hablaron sobre preguntas similares. Pero tengo un libro (Absolute Beginners Guide to C) donde se escribe todo el código dentro de la función main (). El int siempre se deja fuera. ¿Cómo es posible correr? ¿Está bien con tal vez una versión anterior de stdio.h?
Aquí está el código de ejemplo:

#include  main() // not int main() { printf("This is it\n"); return 0; } 

Creo que el estándar c89 permitirá main () pero c99 y superior no. Tienes que usar int main () de lo contrario.

main() funciona pero es confuso, en C la función main siempre devuelve un int, para especificar el estado de salida, por lo que la syntax correcta es int main() , pero si no se molesta en establecer el estado de salida, main() es suficiente , pero los buenos libros en C siempre tendrán int main() .

Este tipo de preguntas son altamente dependientes de la versión estándar, por lo que una respuesta general no tiene mucho sentido.

De un borrador de C89 (corríjame si el Estándar C89 oficial es diferente, no está disponible libremente):

La función llamada al inicio del progtwig se llama main. La implementación no declara ningún prototipo para esta función. Se puede definir sin parámetros:

int main(void) { /*...*/ }

o con dos parámetros (referidos aquí como argc y argv, aunque se puede usar cualquier nombre, ya que son locales a la función en la que están declarados):

int main(int argc, char *argv[]) { /*...*/ }

Los estándares C99 y C11 dicen lo mismo pero agregan algo en el y:

[…]

o equivalente; [9] o de alguna otra manera definida por la implementación.

[9] Por lo tanto, int puede reemplazarse por un nombre typedef definido como int, o el tipo de argv puede escribirse como char ** argv, y así sucesivamente.

En general, las cosas que no están definidas en el estándar llevan a un comportamiento indefinido, por lo que el código es UB en C89 / C90, y podría ser válido en C99 y C11, pero eso está definido por la implementación.

PD: como puede ver, también debe agregar un void en la lista de parámetros, sin ello, el comportamiento se define como se muestra arriba.