Menggunakan Nama Fungsi sebagai Penunjuk Fungsi
Dokumen rasional C90 memberikan gambaran tentang pilihan reka bentuk untuk menyamakan nama fungsi dengan penunjuk fungsi. Kemudahan ini memudahkan penggunaan penunjuk fungsi dalam konteks tertentu.
Pengisytiharan Fungsi
Pertimbangkan pengisytiharan:
int f(); int (*pf)();
Panggilan Fungsi
Semua berikut menyatakan fungsi sah panggilan:
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
Ungkapan pertama pada setiap baris telah diliputi sebelum ini. Yang kedua adalah konvensional. Ungkapan seterusnya membayangkan penukaran tersirat penentu fungsi kepada nilai penunjuk dalam kebanyakan konteks.
Rasional Reka Bentuk
Jawatankuasa tidak melihat sebarang kelemahan yang ketara untuk membenarkan borang ini dan melihat mengharamkan mereka sebagai usaha yang berlebihan. Oleh itu, kesetaraan antara penentu fungsi dan penuding fungsi menawarkan kemudahan dalam penggunaan penuding.
Penukaran Tersirat
Satu lagi pemerhatian menarik ialah penukaran tersirat jenis fungsi kepada penunjuk apabila digunakan sebagai parameter tetapi bukan sebagai jenis pulangan:
typedef bool FunctionType(int); void g(FunctionType); // Implicitly converts to void g(FunctionType *) FunctionType h(); // Error FunctionType *j(); // Returns a function pointer with the type bool(int)
Atas ialah kandungan terperinci Mengapakah Nama Fungsi Boleh Digunakan sebagai Penunjuk Fungsi dalam C90?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!