Cualquier diferencia entre return vs return 0 en C

He escuchado a gente decir que el tipo de retorno main es estrictamente int

  int main(){ printf("hello world"); return 0; // returning 0 to main indicates successful execution } 

En su lugar lo intenté simplemente return .

  int main(){ printf("hello world"); return; // } 

No levanta ninguna advertencia o error. Me pregunto si devuelve 0 o algún valor indefinido como en JavaScript?

¿Estaba leyendo esta pregunta devolviendo falso lo mismo que regresar? que dice return y return false ambos son diferentes en JavaScript. ¿Es lo mismo en C?

El estándar C declara explícitamente como una restricción:

Una statement de retorno con una expresión no aparecerá en una función cuyo tipo de retorno sea nulo. Una statement de retorno sin una expresión solo aparecerá en una función cuyo tipo de retorno sea nulo.

Y main no es una excepción a eso. Así que esto no está permitido por la norma.

Lo que está permitido por el estándar como una excepción para main comparación con otras funciones es que el control puede abandonar el main al final sin tener una statement de return explícita. Pero estas dos cosas no son lo mismo.

(NOTA: Esta respuesta es incorrecta. Vea la respuesta de Jens .)

El estándar C especifica que, en la función main() , un retorno vacío, o la caída del final, es lo mismo que el return 0 . Para todas las demás funciones, no va a funcionar.