Esta es una historia interminable que refleja los límites (un mito) de "interoperabilidad y portabilidad sobre todo".
Lo que el programa debe devolver para indicar "éxito" debe definirse por quién recibe el valor (el sistema operativo o el proceso que invocó el programa) no por una especificación de lenguaje.
Pero a los programadores les gusta escribir código de "manera portátil" y, por lo tanto, inventan su propio modelo para el concepto de "sistema operativo" que define los valores simbólicos a devolver.
Ahora, en un escenario de muchos a muchos (donde muchos idiomas sirven para escribir programas en muchos sistemas), la correspondencia entre la convención de lenguaje para el "éxito" y el sistema operativo (que nadie puede garantizar que sea siempre el mismo) ser manejado por la implementación específica de una biblioteca para una plataforma objetivo específica.
Pero, desafortunadamente, estos conceptos no estaban tan claros en el momento en que se implementó el lenguaje C (principalmente para escribir el núcleo UNIX), y los gigagramos de libros donde se escribieron diciendo "retorno 0 significa éxito", ya que eso era cierto en el sistema operativo en esa vez tener un compilador de C.
A partir de entonces, nunca se hizo una estandarización clara sobre cómo se debería manejar dicha correspondencia. C y C ++ tienen su propia definición de "valores de retorno", pero nadie otorga una traducción adecuada del sistema operativo (o mejor: ninguna documentación del compilador dice nada al respecto). 0 significa éxito si es cierto para UNIX - LINUX y -por razones independientes- también para Windows, y esto cubre el 90% de las "computadoras de consumo" existentes, que - en la mayoría de los casos - ignoran el valor de retorno (para que podamos discutir durante décadas, ¡pero nadie lo notará!)
Dentro de este escenario, antes de tomar una decisión, haga estas preguntas: - ¿Me interesa comunicarle algo a mi interlocutor sobre mi existencia? (Si siempre devuelvo 0 ... no hay ninguna pista detrás de todo) - ¿Mi persona que llama tiene convenciones sobre esta comunicación? (Tenga en cuenta que un solo valor no es una convención: eso no permite ninguna representación de información)
Si ambas respuestas son no, probablemente la buena solución es no escribir la declaración de devolución principal. (Y deje que el compilador decida, con respecto al objetivo, está trabajando).
Si no hay una convención establecida 0 = el éxito cumple con la mayoría de las situaciones (y el uso de símbolos puede ser problemático si introducen una convención).
Si existen convenciones, asegúrese de utilizar constantes simbólicas que sean coherentes con ellas (y garantice la coherencia de las convenciones, no la coherencia de valores, entre plataformas).