Почему нужен WEXITSTATUS?

Следующий код будет ждать завершения дочернего процесса и затем распечатать его код возврата.

int status;
wait(&status);
cout << "return code = " << WEXITSTATUS(status) << endl;

Почему код возврата не может быть сохранен в переменной int? Почему его нужно преобразовать с помощью функции WEXITSTATUS? Что представляет значение переменной без преобразования?

Ответ 1

int содержит не только код выхода - он также хранит информацию о том, как завершился процесс, например, если он был сигнализирован (WIFSIGNALED), или если был вызван exit() (WIFEXITED) и т.д..

Макросы W используются для извлечения различных фрагментов информации из int.

Ответ 2

status содержит не только возвращаемое значение процесса, но также и почему возвращен вызов wait(2,3p) (что не всегда может быть нормальным выходом из процесса). Различные макросы W*() используются для разбиения возвращаемого значения на его составные части.