Ini adalah cerita yang tidak pernah berakhir yang mencerminkan batasan (mitos) dari "interoperabilitas dan portabilitas di atas segalanya".
Apa yang program harus kembalikan untuk menunjukkan "sukses" harus ditentukan oleh siapa yang menerima nilai (sistem operasi, atau proses yang memanggil program) bukan oleh spesifikasi bahasa.
Tetapi programmer suka menulis kode dengan "cara portabel" dan karenanya mereka menciptakan model mereka sendiri untuk konsep "sistem operasi" yang mendefinisikan nilai-nilai simbolik untuk dikembalikan.
Sekarang, dalam skenario banyak-ke-banyak (di mana banyak bahasa berfungsi untuk menulis program ke banyak sistem), korespondensi antara konvensi bahasa untuk "berhasil" dan sistem operasi (yang tidak dapat diberikan oleh siapa pun untuk selalu sama) harus ditangani oleh implementasi khusus perpustakaan untuk platform target tertentu.
Tapi - sayangnya - konsep ini tidak begitu jelas pada saat bahasa C digunakan (terutama untuk menulis kernel UNIX), dan Gigagram buku yang ditulis dengan mengatakan "return 0 berarti sukses", karena itu benar pada OS di saat itu memiliki kompiler C.
Sejak saat itu, tidak pernah dibuat standarisasi yang jelas tentang bagaimana korespondensi tersebut harus ditangani. C dan C ++ memiliki definisi mereka sendiri tentang "nilai yang dikembalikan" tetapi tidak ada yang memberikan terjemahan OS yang tepat (atau lebih baik: tidak ada dokumentasi kompilator yang mengatakan apa pun tentangnya). 0 berarti sukses jika benar untuk UNIX - LINUX dan -untuk alasan independen- untuk Windows juga, dan ini mencakup 90% dari "komputer konsumen" yang ada, yang - dalam sebagian besar kasus - mengabaikan nilai yang dikembalikan (sehingga kami dapat diskusikan selama beberapa dekade, tapi tidak ada yang akan memperhatikan!)
Di dalam skenario ini, sebelum mengambil keputusan, tanyakan pertanyaan berikut: - Apakah saya tertarik untuk mengkomunikasikan sesuatu kepada penelepon tentang keberadaan saya? (Jika saya selalu mengembalikan 0 ... tidak ada petunjuk di balik semuanya) - Apakah penelepon saya memiliki kesepakatan tentang komunikasi ini? (Perhatikan bahwa satu nilai bukanlah konvensi: yang tidak mengizinkan representasi informasi apa pun)
Jika kedua jawaban ini tidak, mungkin solusi yang baik adalah tidak menulis pernyataan pengembalian utama sama sekali. (Dan biarkan kompilator untuk memutuskan, sehubungan dengan target bekerja).
Jika tidak ada konvensi di tempat, 0 = sukses memenuhi sebagian besar situasi (dan menggunakan simbol mungkin bermasalah, jika mereka memperkenalkan konvensi).
Jika ada konvensi, pastikan untuk menggunakan konstanta simbolik yang koheren dengannya (dan pastikan koherensi konvensi, bukan koherensi nilai, antar platform).