Es específico de la implementación. Podrías hacer esto:
int main()
{
assert(0);
}
Luego ejecútalo:
./a.out
echo $?
1 (<- o lo que sea)
Esto al menos le dirá qué esperar de su configuración. Obtengo 134 en un par de cajas de Linux con GCC y g++.
El estándar C99 (sin cambios en C11) establece que assert
llamadas abort
y el abort
cosas dice esto sobre el código de retorno:
Una forma definida por la implementación del estado de finalización sin éxito se devuelve al entorno host mediante la llamada de función raise(SIGABRT)
.
Está documentado en la sección 7.2.1.1 (afirmar) y 7.20.4.1 (cancelar) del estándar C99 aquí.
Muchos sistemas UNIX devolverán 128 más el número de señal (SIGABRT
es la señal número 6), por lo que puede obtener 134. Lo que sea que obtenga, debe estar documentado por la implementación de C.
Por ejemplo, consulte aquí para gcc
. Aunque no dice nada sobre lo que se devuelve al entorno de llamada. De las secciones específicas aquí:
La biblioteca y el sistema operativo (u otro entorno al compilar para un entorno independiente) toman algunas decisiones; consulte su documentación para obtener más detalles.
Y aquí:
El comportamiento de la mayoría de estos puntos depende de la implementación de la biblioteca C y no está definido por GCC.
Así es el glibc
doco aquí en la terminación del programa (específicamente el bit de estado de salida). Menciona convenciones pero no reglas firmes.