ฉันเห็นในจำนวนมากซอฟต์แวร์เดิมและบทเรียนที่ไม่ดีบนอินเทอร์เน็ตที่แนะนำให้ใช้exit(-1)
, return -1
หรือคล้ายกันที่จะเป็นตัวแทน "เลิกผิดปกติ" ปัญหาคือใน POSIX อย่างน้อย-1
ไม่เคยมีมาก่อนและไม่ใช่รหัสสถานะที่ถูกต้อง man 3 exit
แสดงให้เห็นว่าexit()
ผลตอบแทนที่คุ้มค่าของการstatus & 0377
ไปยังผู้ปกครองที่มีความหมายว่าจะกลายเป็น-1
255
สำหรับระบบที่ไม่ใช่ POSIX EXIT_FAILURE
ขอแนะนำให้พกพาได้ แต่ฉันไม่เคยเห็น "-1 หมายถึงการสิ้นสุดที่ผิดปกติ" ร่วมกับ "EXIT_FAILURE อาจเป็นสิ่งที่นอกเหนือจาก 1" ซึ่งบ่งชี้ว่าพวกเขาเชื่ออย่างชัดเจนว่า "-1" นั้นเป็นเรื่องปกติแม้ในระบบที่ไม่ใช่ POSIX
ต่อไปนี้เป็นตัวอย่างของคำถาม StackOverflowที่ทำให้เกิดปัญหานี้ ซอฟต์แวร์ "unrealircd" เป็นตัวอย่างของโปรแกรมที่ใช้exit(-1)
ในการยกเลิกโปรแกรม systemd
ในทางปฏิบัตินี้ทำให้ยากที่จะติดต่อกับ
รูปแบบการต่อต้านนี้มาจากไหน มันถูกต้องในบางบริบท?
unsigned char
ได้ง่าย
char
ตั้งแต่ค่าคือ -128 ถึง 127 นอกจากนี้ฉันได้ระบุ "-1" ได้รับการแปลงเป็น "255" ในเนื้อหาคำถามของฉัน .