Standar adalah semacam "kontrak" antara Anda dan kompiler Anda yang mendefinisikan arti dari program Anda. Sebagai programmer, kita sering memiliki model mental tertentu tentang bagaimana bahasa bekerja, dan model mental ini sering bertentangan dengan standar. (Sebagai contoh, programmer C sering menganggap pointer sebagai kira-kira "integer yang menunjukkan alamat memori", dan oleh karena itu menganggap bahwa aman untuk melakukan aritmatika / konversi / manipulasi pada pointer yang mungkin dilakukan dengan integer yang menunjukkan memori address. Asumsi ini tidak sesuai dengan standar; itu sebenarnya memberlakukan batasan yang sangat ketat pada apa yang dapat Anda lakukan dengan pointer.)
Jadi, apa keuntungan mengikuti standar, daripada model mental Anda sendiri?
Sederhananya, standarnya benar, dan model mental Anda sendiri salah. Model mental Anda biasanya adalah pandangan yang disederhanakan tentang bagaimana segala sesuatu bekerja pada sistem Anda sendiri, dalam kasus umum, dengan semua optimisasi kompiler dinonaktifkan; vendor compiler umumnya tidak berupaya untuk menyesuaikan diri dengannya, terutama ketika menyangkut optimasi. (Jika Anda tidak memegang akhir kontrak Anda, Anda tidak dapat mengharapkan perilaku spesifik dari kompiler: sampah masuk, sampah keluar.)
Orang-orang tampaknya tidak menyukai solusi non-portabel, bahkan jika mereka bekerja untuk saya.
Mungkin lebih baik untuk mengatakan, "bahkan jika mereka tampaknya bekerja untuk saya". Kecuali jika kompiler Anda secara khusus mendokumentasikan bahwa perilaku yang diberikan akan berfungsi (yaitu: kecuali jika Anda menggunakan standar yang diperkaya, yang terdiri dari dokumentasi yang tepat ditambah kompiler), Anda tidak tahu itu benar-benar berfungsi, atau bahwa itu benar-benar dapat diandalkan. Sebagai contoh, integer overflow yang ditandatangani biasanya menghasilkan pembungkus pada banyak sistem (jadi, INT_MAX+1
biasanya INT_MIN
) - kecuali bahwa kompiler "tahu" bahwa aritmatika integer yang ditandatangani tidak pernah meluap dalam program C (benar), dan sering melakukan optimasi yang sangat mengejutkan berdasarkan ini " pengetahuan".