Saya telah mendengar bahwa ini adalah praktik yang baik untuk menulis fungsi yang tidak menerima apa pun sebagai parameter seperti ini:
int func(void);
Tetapi saya mendengar bahwa cara yang tepat untuk mengekspresikannya adalah seperti ini:
int func();
Apa perbedaan antara kedua deklarasi fungsi ini di C dan C ++?
c++
programming-practices
c
Grizzly
sumber
sumber
Jawaban:
C dan C ++ berbeda dalam hal ini.
C 2011 Online Standard
Singkatnya, daftar parameter kosong dalam deklarasi fungsi menunjukkan bahwa fungsi tersebut mengambil jumlah parameter yang tidak ditentukan , sedangkan daftar parameter kosong dalam definisi fungsi menunjukkan bahwa fungsi tersebut tidak mengambil parameter.
Sejauh menyangkut C, Anda tidak boleh menggunakan daftar pengidentifikasi kosong dalam deklarasi atau definisi fungsi . Jika suatu fungsi tidak dimaksudkan untuk mengambil parameter apa pun, tentukan dengan menggunakan
void
dalam daftar parameter.Online C ++ standar
Dalam kasus C ++, daftar parameter kosong baik dalam deklarasi atau definisi menunjukkan bahwa fungsi tidak mengambil argumen, dan setara dengan menggunakan daftar parameter
void
.sumber
Dalam C, fungsi dengan daftar parameter kosong
()
dapat mengambil apa saja untuk argumennya. Apa pun secara harfiah. Ini biasanya digunakan untuk mengimplementasikan suatu fungsi yang dapat mengambil sejumlah variabel argumen , meskipun hari ini dianggap lebih baik menggunakan sintaksis ellipsis yang lebih eksplisit(...)
untuk fungsi-fungsi ini.Dalam C, fungsi dengan daftar parameter
(void)
secara eksplisit tidak membutuhkan argumen apa pun . Itu berarti kompiler benar-benar dapat memberi tahu Anda bahwa Anda telah membuat kesalahan jika Anda mencoba untuk melewatkan sesuatu.Dalam C ++, deklarasi fungsi ini setara. Daftar parameter kosong berarti "tidak ada parameter" sama dengan yang
void
ada.sumber
()
untuk mereka yang variadic. Apakah Anda memiliki contoh program yang menggunakan konvensi ini?...
sintaks, dan harus memiliki setidaknya satu parameter bernama. Mendefinisikan fungsi seperti itu dengan()
menyebabkan perilaku tidak terdefinisi - dan tidak ada cara bagi tubuh fungsi untuk menggunakan makro yang didefinisikan<stdarg.h>
untuk membaca nilai parameter. Ini telah terjadi sejak standar 1989/1990....
sintaks untuk menghindari perilaku yang tidak terdefinisi.