Tôi đã làm một bài tập cho trường đại học nơi tôi phải trả lại một giá trị với lối ra, giá trị đó thực sự là một thứ gì đó. Điều này có thể cao hơn 255 (mà lối ra() không thể xử lý) nhưng giáo viên đề xuất sử dụng dữ liệu thử nghiệm mà số lượng không bao giờ có thể vượt quá giá trị đó. Sau khi tất cả điều này, tôi cần phải xử lý giá trị đếm này, trạng thái thoát, tôi nhận giá trị này trong quá trình chính bằng cách sử dụng waitpid(). Trước sự ngạc nhiên của tôi, nếu quá trình con trở về 1, giá trị "thực" trong quá trình chính là 256, 2 là 512 và cứ thế ...Bất kỳ lợi ích nào khi sử dụng macro WEXITSTATUS trong C trên phân chia 256 trên trạng thái exit()?
Tôi cần in giá trị này vì vậy tôi đơn giản chia nó cho 256 và Nó được làm xong rồi. Tuy nhiên, nếu tôi sử dụng WEXITSTATUS() vĩ mô, tôi sẽ cũng nhận được giá trị này theo cách tôi muốn nó ...
Tôi nhìn mã nguồn C và đây là những gì tôi phát hiện ra:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
Tôi hiểu những gì đang xảy ra ở đây, ví dụ, 512 trong nhị phân là 10 0000 0000, dịch chuyển 8 o bên phải sẽ cho 00 0000 0010, là 2 trong thập phân. Những gì tôi không hiểu trong vĩ mô này là nhà điều hành & và thực tế là 0xff00 có vẻ là một số ngẫu nhiên (nó có lẽ không phải là, nó đến từ đâu?). Điều này làm gì chính xác, tại sao có "& 0xff00" trong macro? Nó sẽ không hoạt động với nó?
Và câu hỏi thực sự trong chủ đề này, là điều tương tự để gọi macro này trong mã của tôi khi chia cho 256?