Buenas!!!la diferencia entre :
void main()
void main(void)
main()
main(void)
es ninguna, la forma digamos completa de definir una funcion seria void main(void), donde el primer void indica que la funcion no devuelve ningun valor, donde main significa que es la funcion principal y donde el segundo void, el que esta entre parentesis(void), significa que la funcion no acepta ninguna variable.
Los compiladores por defecto, al no declarar el tipo de la funcion(seria el primer void), lo declaran como void, y tambien por defecto el compilador declara como vacio(es decir como void) los parametro a pasar si no se le asigna lo contrario(seria el segundo void, el que esta entre parentesis)....
Suerte!!!