Question C de base sur les valeurs de retour

J’apprends juste C et j’utilise xCode pour cela (je ne sais pas si c’est important). Ce code:

#include  int main (int argc, const char * argv[]) { int myInt; myInt = 2; myInt *= ( (3*4) / 2 ) - 9; printf("myInt = %d", myInt); return myInt; } 

Sortie ceci:

 Session started at 2009-11-09 15:51:15 -0500.] myInt = -6 The Debugger has exited with status 250.The Debugger has exited with status 250. 

La printf a raison, mais qu’en est-il du retour

A) le faire envelopper, et

B) montrer les résultats deux fois? (pour clarifier, si je mets return 0; il n’imprimera qu’une fois la ligne “le débogueur est sorti”, avec la valeur 0).

Merci!

Les codes de retour sont interprétés par le shell comme des entiers non signés, compris entre 0 et 255.

Sous Unix, la valeur de retour d’un programme est limitée à la plage 0-255 (oui, le type de retour de main est int, mais il s’agit d’une anomalie historique). Consultez cette documentation GNU sur l’ état de sortie .

En ce qui concerne le message “Le débogueur est sorti avec le statut 250” affiché deux fois, cela provient du processus qui exécute votre commande et vous n’avez donc aucun contrôle sur celle-ci.

Je suppose que xcode traite le statut de sortie comme 00-FF (0-255) et -6 = 250 dans ce cas

Consultez la page de manuel sur exit() et _Exit() :

Les deux fonctions rendent les huit bits de poids faible de l’argument d’état disponibles pour un processus parent […]

Le retour à la ligne (comme vous le décrivez) résulte de l’échec de la sortie d’un caractère LF (saut de ligne) dans le cadre de votre appel à printf (). Vous pouvez résoudre ce problème en ajoutant \ n à la chaîne de format d’impression. Changez votre code pour ceci:

 #include  int main (int argc, const char * argv[]) { int myInt; myInt = 2; myInt *= ( (3*4) / 2 ) - 9; printf("myInt = %d\n", myInt); return myInt; } 

Quant à doubler, “le débogueur est sorti avec le statut 250”. c’est une fonction de votre IDE / débogueur, et non le résultat de votre code. Comme d’autres l’ont expliqué, -6 = 0xFFFFFFFA, qui, lorsqu’il est tronqué à 8 bits et traité comme non signé, équivaut à 250 en décimal.

Votre code de retour pour main doit être 0 sauf erreur. Ceci est une convention commune sous Unix et ne fait pas de mal aux fenêtres. http://en.wikipedia.org/wiki/Main_function_%28programming%29

-6 est représenté comme un complément de 2 en 6 binary pour le stocker en mémoire.