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?

19
demandé sur princepiero 2013-09-19 13:09:31

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.

8
répondu Emilio Garavaglia 2013-09-19 09:37:47

à 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.

3
répondu nijansen 2013-09-19 10:42:52

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é.

2
répondu Sirch 2013-09-19 09:30:48