ดีก็สามารถทำได้
ตัวอย่างเช่นในภาษาถิ่นของ 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แต่มันเป็นการพูดเกินจริงเล็กน้อยที่จะบอกว่ามันผิด )