Rumah >pembangunan bahagian belakang >C++ >Mengapakah Nama Fungsi Boleh Digunakan sebagai Penunjuk Fungsi dalam C90?

Mengapakah Nama Fungsi Boleh Digunakan sebagai Penunjuk Fungsi dalam C90?

Susan Sarandon
Susan Sarandonasal
2024-11-12 03:22:021018semak imbas

Why Can Function Names Be Used as Function Pointers in C90?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn