Mengapa Nama Fungsi Bersamaan dengan Penunjuk Fungsi dengan Alamat-Pengendali?
Dalam pengaturcaraan C, menggunakan nama fungsi sebagai penuding fungsi adalah bersamaan dengan menggunakan alamat-pengendali (&) pada nama fungsi. Ketidakselarasan yang kelihatan ini dengan unsur bahasa lain, seperti tatasusunan, mempunyai rasional tertentu.
Rasional Kesetaraan Nama Fungsi
Menurut dokumen Rasional ANSI C90, kesetaraan antara penunjuk fungsi (nama fungsi) dan penunjuk fungsi diperkenalkan untuk meningkatkan kemudahan. Dengan membenarkan kedua-dua notasi, bahasa menyediakan cara ringkas untuk memanggil fungsi ahli dalam struktur berpakej. Contohnya:
graphics.open(file) // Equivalent to (*graphics.open)(file)
Keingintahuan Penentu Fungsi
Persamaan ini membawa kepada bentuk sintaksis yang pelik tetapi sah:
( &f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
Jawatankuasa memberi alasan yang melarang borang seperti (f)() sambil membenarkan a (untuk int a[]) pastinya tidak perlu dan menyusahkan.
Pengecualian dalam Parameter dan Jenis Pulangan
Menariknya, jenis fungsi boleh secara tersirat ditukar kepada penuding kepada dirinya sendiri sebagai parameter (cth., void g(FunctionType)). Walau bagaimanapun, ia tidak boleh ditukar kepada penunjuk apabila digunakan sebagai jenis pulangan (cth., FunctionType h();). Perbezaan ini memastikan isu keserasian jenis fungsi dapat dielakkan.
Atas ialah kandungan terperinci Mengapakah Nama Fungsi Setara dengan Penunjuk Fungsi dengan Alamat-Operator dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!