GNU/Linux >> Tutoriales Linux >  >> Linux

Cuando la afirmación () falla, ¿cuál es el código de salida del programa?

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.


Linux
  1. ¿Código de salida predeterminado cuando finaliza el proceso?

  2. ¿Qué sucede cuando ejecuto el comando Cat /proc/cpuinfo?

  3. ¿Qué sucede exactamente cuando ejecuto un archivo en el Shell?

  4. ¿Qué hace un programa cuando se envía una señal Sigkill?

  5. llamar a una función cuando el programa haya terminado con ctrl c

Sabores de Ubuntu:¿Cuál es la diferencia?

Curl descargando HTML en lugar del archivo zip real? Esto es lo que debe hacer

¿Qué significa __init en el código del kernel de Linux?

¿Qué partes de este código ensamblador de HelloWorld son esenciales si tuviera que escribir el programa en ensamblador?

¿Cuál es la versión coloreada del programa superior de Linux?

¿Qué es la variable de entorno XDG_VTNR?