C++: Comment retourner une valeur négative dans main.rpc
comme devoir à l'école, nous devons écrire un programme C++ et renvoyer différents codes d'erreur dans le main
.
Le problème est que nous devons retourner -2
si une erreur se produit, mais je n'ai aucune idée de comment retourner une valeur négative.
Par exemple:
int main()
{
int a = -2;
return a;
}
dans windows cela me donne une valeur de retour comme:42232684
et sous Linux il y a: 253
Pourquoi -2
n'est pas autorisé?
et comment puis-je arriver à obtenir -2
?
3 réponses
le problème est que ce qui est retourné à L'OS est alors interprété par le shell de L'OS comme il l'aime, pas comme votre programme l'aime.
la fonction principale renvoie un int, et return -2
est exactement ce que votre programme doit faire.
253 est de -2 en 2s complément sur 8 bits.
le problème-ici - est un décalage entre les spécifications C++ (int main()
) et la façon dont le shell l'utilise. Mais il ne dépend pas du programme.
la mission elle-même est une piège.
à Partir de C++11 standard de 18,5/8:
si le statut est zéro ou EXIT_SUCCESS, un mise en œuvre-forme définie de l'État fin réussie est retourné. Si le statut est EXIT_FAILURE, une forme définie par la mise en œuvre de la fin de statut non réussie est retournée. Sinon, le statut retourné est défini par l'implémentation.
ainsi est-il tout à fait conforme que vous obtenez des résultats différents pour différentes plates-formes, et/ou compilateurs.
Unix, et linux sont limités à 8 codes de retour de bits, -2 est 0xfe. Que votre coquille comprendra comme étant 254 quand vous echo $?
on s'attend à ce que vous donniez un code de retour entre 0 et 255.
http://en.wikipedia.org/wiki/Exit_status
sur POSIX-compatible exit les statuts sont limités aux valeurs 0-255, le portée d'un entier 8 bits non signé.