Anda tidak perlu melihat keseluruhan fungsi untuk mengetahui cara memanggilnya. Kamu hanya perlu sebuah janji. Janji itu adalah prototipe fungsinya.
Di C modern, mendeklarasikan prototipe di muka tidak dapat dinegosiasikan. Ini memberi tahu kompiler apa yang diharapkan suatu fungsi: nama, tipe argumen, dan nilai kembalian. Tanpanya, Anda menjadi buta. Dan di C, kebutaan itu mahal.
Biaya Tersembunyi dari Prototipe yang Hilang
Pertimbangkan cuplikan ini. Tampaknya tidak bersalah. Itu dikompilasi. Ini berjalan.
Di sini, add jelas membutuhkan dua bilangan bulat. Tapi panggilan itu hanya melewati satu. Kompiler yang ketat harus berteriak. Banyak yang tidak. Mereka secara default mengasumsikan tipe kembalian adalah int dan mengabaikan ketidakcocokan parameter sepenuhnya.
Hasilnya? Jawaban yang salah. Korupsi diam-diam. Anda menghabiskan waktu berjam-jam berburu serangga yang menatap wajah Anda di baris kedua.
Hal ini terjadi karena perilaku C lama menetapkan fungsi yang belum diprototipe secara default untuk mengembalikan int. Jika fungsi sebenarnya mengembalikan float, kompiler salah menafsirkan bit. Prototipe memperbaikinya. Ini menegakkan kontrak.
Menegakkan Kontrak
Letakkan prototipe di atas. Di mana saja sebelum panggilan pertama.
Sekarang kompiler menandai kesalahan tersebut. Ia mengetahui bahwa add memerlukan dua argumen. Ia menolak untuk mengkompilasi panggilan yang tidak cocok. Anda menghemat waktu berjam-jam untuk melakukan debug.
Gaya Lama vs. Modern C
Kompiler non-ANSI adalah hal yang berbeda. Mereka mengizinkan pembuatan prototipe, tetapi dengan syarat tertentu. Daftar parameter harus kosong.
Ini memberi tahu kompiler nama dan tipe pengembalian. Ia tidak mengatakan apa pun tentang argumen. Tidak ada pemeriksaan kesalahan yang terjadi. Anda kembali ke titik awal.
C modern (standar ANSI) memerlukan tipe eksplisit dalam prototipe. Hal ini menghilangkan ambiguitas. Ini menangkap ketidakcocokan tipe. Ini menangkap argumen yang hilang. Ia menangkap segalanya.
Langkah Praktis
- Memfaktorkan ulang pengurutan gelembung. Pindahkan logika ke dalam suatu fungsi. Deklarasikan prototipe. Lewati array dan ukurannya secara eksplisit.
- Isolasi masukan. Buat fungsi khusus untuk masukan pengguna. Jangan mengacaukan
utama. Prototipe itu. Ujilah.
Ini bukan tentang poin gaya. Ini tentang kebenaran.
Prototipe adalah kontrak yang diberlakukan oleh kompiler. Hancurkan, dan pembangunannya gagal.
Anda mungkin bertanya-tanya mengapa ini penting jika kode Anda berjalan. Ini penting karena kesalahan waktu proses lebih sulit diperbaiki dibandingkan kesalahan waktu kompilasi. Kesalahan kompilasi menghentikan Anda. Kesalahan runtime bersembunyi di produksi.
Perbedaan antara program yang kuat dan program yang rapuh sering kali terletak pada beberapa baris di atas. Jangan lewatkan mereka.
Kompiler ada untuk membantu. Dengarkan itu.















