Tout avantage à utiliser les WEXITSTATUS macro en C au cours de la division par 256 sur exit() de statut?

Je faisais un exercice à l'université, où j'ai dû renvoyer une valeur à la sortie, cette valeur était en fait un compte de quelque chose. Cela pourrait être au-dessus de 255 (exit() ne peut pas gérer), mais le professeur a proposé d'utiliser des données de test où le comte ne pourrait jamais aller au-dessus de cette valeur.

Après tout cela, j'avais besoin de gérer cette valeur de nombre, le statut de sortie, j'ai eu cette valeur dans les principaux processus à l'aide de waitpid(). À ma grande surprise, si le processus de l'enfant est retourné 1, la valeur "réelle" dans le processus principal était de 256, 2 était de 512 et ainsi de suite...

J'avais besoin de l'impression de cette valeur, de sorte que j'ai simplement divisé par 256 et il a été fait. Cependant, si j'utilise le WEXITSTATUS() macro, je vais également obtenir cette valeur comme je le veux...

J'ai regardé de code source C et c'est ce que j'ai trouvé:

#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)

Je comprends ce qui se passe ici, par exemple, 512 en binaire est de 10 0000 0000, un décalage de 8 o la droite pour donner 00 0000 0010, qui est de 2 en décimal. Ce que je ne comprends pas dans cette macro, c'est que & opérateur et le fait que 0xff00 semble un nombre aléatoire (il n'est probablement pas le cas, d'où vient-elle?). À quoi ça sert exactement, pourquoi il y a "& 0xff00" dans la macro? Ne serait-il pas travailler avec elle?

Et la vraie question dans cette rubrique, c'est la même chose pour appeler cette macro dans mon code comme une division par 256?

OriginalL'auteur Ricardo Amaral | 2009-04-30