ดีก็สามารถทำได้
ตัวอย่างเช่นในภาษาถิ่นของ C ที่ใช้ในระบบปฏิบัติการPlan 9main
โดยปกติแล้วจะประกาศเป็นvoid
ฟังก์ชัน แต่สถานะการออกจะถูกส่งกลับไปยังสภาพแวดล้อมการโทรโดยส่งตัวชี้สตริงไปยังexits()
ฟังก์ชัน สตริงว่างหมายถึงความสำเร็จและสตริงที่ไม่ว่างใด ๆ แสดงถึงความล้มเหลวบางประเภท สิ่งนี้สามารถนำไปใช้งานได้โดยmain
ส่งคืนchar*
ผลลัพธ์
และแน่นอนว่ามันจะเป็นไปได้ที่จะใช้ระบบที่มีfloat
หรือdouble
ออกจากสถานะ
แล้วทำไมint
ล่ะ มันเป็นเพียงเรื่องของการประชุม - และมีคุณค่าอย่างมากในการมีระบบปฏิบัติการและโปรแกรมที่ทำงานภายใต้พวกเขาปฏิบัติตามแบบแผนทั่วไป
การประชุม Unix คือการใช้รหัสสถานะจำนวนเต็มกับ 0 แสดงถึงความสำเร็จและความล้มเหลวที่ไม่ใช่ศูนย์ (เพราะโดยทั่วไปมีวิธีเดียวที่จะประสบความสำเร็จ แต่วิธีล้มเหลวหลายวิธี) ฉันไม่รู้ว่าอนุสัญญานี้มีต้นกำเนิดมาจาก Unix หรือไม่ ฉันสงสัยว่ามันมาจากระบบปฏิบัติการก่อนหน้านี้
จุดลอยตัวจะเป็นแบบแผนที่ยากขึ้นเพราะ (ก) การสนับสนุนจุดลอยตัวนั้นไม่เป็นสากล (b) มันยากกว่าในการกำหนดการแมประหว่างค่าจุดลอยตัวกับเงื่อนไขข้อผิดพลาด (c) ระบบที่แตกต่างกันใช้จุดลอยตัวที่แตกต่างกัน การเป็นตัวแทนจุดและ (d) เพียงแค่จินตนาการถึงความสนุกในการติดตามข้อผิดพลาดในการปัดเศษในสถานะออกจากโปรแกรมของคุณ ในทางกลับกันจำนวนเต็มยืมตัวเองดีมากในการระบุรหัสข้อผิดพลาด
ตามที่ฉันกล่าวถึงแผน 9 ใช้สตริง แต่มีความซับซ้อนบางอย่างสำหรับการจัดการหน่วยความจำการเข้ารหัสอักขระ ฯลฯ เท่าที่ฉันรู้ความคิดใหม่เมื่อแผน 9 นำไปใช้และไม่ได้แทนที่สิ่งที่มีอยู่เดิม อนุสัญญาอย่างกว้างขวาง
(โดยบังเอิญใน C ++ main
สามารถส่งคืนได้เท่านั้นint
และใน C void main
อนุญาตเฉพาะในกรณีที่คอมไพเลอร์สนับสนุนเฉพาะเท่านั้นคอมไพเลอร์หลายคนไม่บ่นเสียงดังมากถ้าคุณเขียนvoid main
แต่มันเป็นการพูดเกินจริงเล็กน้อยที่จะบอกว่ามันผิด )