Jawaban cepat: ubah int testlib()
ke int testlib(void)
untuk menentukan bahwa fungsi tidak memerlukan argumen.
Sebuah prototipe adalah dengan definisi sebuah deklarasi fungsi yang menentukan jenis (s) dari argumen fungsi (s).
Deklarasi fungsi non-prototipe seperti
int foo();
adalah deklarasi gaya lama yang tidak menentukan jumlah atau tipe argumen. (Sebelum standar ANSI C 1989, ini adalah satu-satunya jenis deklarasi fungsi yang tersedia dalam bahasa tersebut.) Anda dapat memanggil fungsi semacam itu dengan sejumlah argumen arbitrer, dan kompilator tidak diharuskan mengeluh - tetapi jika panggilan tidak konsisten dengan definisi , program Anda memiliki perilaku yang tidak ditentukan.
Untuk fungsi yang mengambil satu atau lebih argumen, Anda bisa menentukan tipe setiap argumen dalam deklarasi:
int bar(int x, double y);
Fungsi tanpa argumen adalah kasus khusus. Secara logis, tanda kurung kosong akan menjadi cara yang baik untuk menentukan argumen itu tetapi sintaks sudah digunakan untuk deklarasi fungsi gaya lama, sehingga komite ANSI C menemukan sintaks baru menggunakan void
kata kunci:
int foo(void); /* foo takes no arguments */
Definisi fungsi (yang mencakup kode untuk apa fungsi sebenarnya) juga menyediakan deklarasi . Dalam kasus Anda, Anda memiliki sesuatu yang mirip dengan:
int testlib()
{
/* code that implements testlib */
}
Ini memberikan deklarasi non-prototipe untuk testlib
. Sebagai definisi, ini memberitahu kompiler yang testlib
tidak memiliki parameter, tetapi sebagai deklarasi, itu hanya memberitahu kompiler yang testlib
mengambil beberapa nomor dan jenis argumen yang tidak ditentukan tetapi tetap.
Jika Anda mengubah ()
ke (void)
deklarasi menjadi prototipe.
Keuntungan dari prototipe adalah bahwa jika Anda secara tidak sengaja memanggil testlib
dengan satu atau lebih argumen, kompiler akan mendiagnosis kesalahan tersebut.
(C ++ memiliki aturan yang sedikit berbeda. C ++ tidak memiliki deklarasi fungsi gaya lama, dan tanda kurung kosong secara khusus berarti bahwa suatu fungsi tidak memerlukan argumen. C ++ mendukung (void)
sintaks untuk konsistensi dengan C. Tetapi kecuali Anda secara spesifik memerlukan kode Anda untuk mengkompilasi keduanya sebagai C dan sebagai C ++, Anda mungkin harus menggunakan ()
dalam C ++ dan (void)
sintaks dalam C.)