Stavo facendo un esercizio universitario in cui dovevo restituire un valore con exit, quel valore era in realtà un conteggio di qualcosa. Questo potrebbe essere superiore a 255 (che exit() non può gestire) ma l'insegnante ha suggerito di utilizzare i dati di test in cui il conteggio non potrebbe mai superare tale valore.Qualsiasi vantaggio nell'utilizzo della macro WEXITSTATUS in C su divisione per 256 in stato exit()?
Dopo tutto ciò, ho dovuto gestire questo valore di conteggio, lo stato di uscita, ho ottenuto questo valore nel processo principale utilizzando waitpid(). Con mia sorpresa, se il processo figlio restituiva 1, il valore "reale" nel processo principale era 256, 2 era 512 e così via ...
Avevo bisogno di stampare questo valore così l'ho semplicemente diviso per 256 e era fatto. Tuttavia, se uso la macro WEXITSTATUS(), sarò anche ottenere questo valore il modo in cui lo voglio ...
ho guardato il codice sorgente C e questo è quello che ho scoperto:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
Capisco cosa sta succedendo qui, per esempio, 512 in binario è 10 0000 0000, lo spostamento di 8 o il diritto darà 00 0000 0010, che è 2 in decimale. Quello che non capisco in questa macro è l'operatore & e il fatto che 0xff00 sembra un numero casuale (probabilmente non lo è, da dove viene però?). Che cosa fa esattamente questo, perché c'è "& 0xff00" nella macro? Non funzionerebbe senza di esso?
E la vera domanda in questo argomento è la stessa cosa chiamare questa macro nel mio codice come dividendo per 256?