GNU/Linux >> Tutoriels Linux >  >> Linux

Quand assert() échoue, quel est le code de sortie du programme ?

C'est spécifique à l'implémentation. Vous pouvez faire ceci :

int main()
{
    assert(0);
}

Puis lancez-le :

./a.out
echo $?

1 (<- ou autre)

Cela vous dira au moins à quoi vous attendre pour votre configuration. J'obtiens 134 sur quelques machines Linux avec GCC et g++.


La norme C99 (inchangée dans C11) stipule que assert appelle abort et le abort stuff indique ceci à propos du code de retour :

Une forme définie par l'implémentation de l'état d'arrêt infructueux est renvoyée à l'environnement hôte au moyen de l'appel de fonction raise(SIGABRT) .

C'est documenté dans la section 7.2.1.1 (affirmer) et 7.20.4.1 (abandonner) de la norme C99 ici.

De nombreux systèmes UNIX renverront 128 plus le numéro de signal (SIGABRT est le signal numéro 6) donc vous pouvez obtenir 134. Quoi que vous obteniez, cela devrait être documenté par l'implémentation C.

Par exemple, voir ici pour gcc . Bien qu'il soit assez silencieux sur ce qui est renvoyé à l'environnement appelant. À partir des sections spécifiques ici :

Certains choix sont faits par la bibliothèque et le système d'exploitation (ou un autre environnement lors de la compilation pour un environnement autonome); reportez-vous à leur documentation pour plus de détails.

Et ici :

Le comportement de la plupart de ces points dépend de l'implémentation de la bibliothèque C et n'est pas défini par GCC lui-même.

Le glibc aussi doco ici à la fin du programme (en particulier le bit d'état de sortie). Il mentionne des conventions mais pas de règles fermes.


Linux
  1. Code de sortie par défaut lorsque le processus est terminé ?

  2. Que se passe-t-il lorsque j'exécute la commande Cat /proc/cpuinfo ?

  3. Impossible d'obtenir le bon code de sortie à partir d'un script ?

  4. Comment obtenir plus d'informations sur l'origine d'un code de sortie ?

  5. Qu'est-ce que j'obtiendrais si Sudo était un programme destructeur du noyau ?

Saveurs Ubuntu :quelle est la différence ?

Curl télécharge du HTML au lieu du fichier Zip réel ? Voici quoi faire

Que sont les codes de sortie Bash sous Linux

Que signifie __init dans le code du noyau Linux ?

Quelle est la version colorisée du meilleur programme Linux ?

Que fait le -e dans un bash shebang ?