Rumah > Artikel > pembangunan bahagian belakang > Dalam bahasa C, fungsi bersarang
Dalam sesetengah aplikasi, kami mendapati bahawa beberapa fungsi diisytiharkan di dalam fungsi lain. Ini kadangkala dipanggil fungsi bersarang, tetapi ia sebenarnya bukan fungsi bersarang. Ini dipanggil skop leksikal. Dalam C, skop leksikal tidak mempunyai kesan kerana pengkompil tidak dapat mencari lokasi memori yang betul bagi fungsi dalaman.
Takrifan fungsi bersarang tidak boleh mengakses pembolehubah setempat bagi blok sekeliling. Mereka hanya boleh mengakses pembolehubah global. Dalam C, terdapat dua skop bersarang: tempatan dan global. Oleh itu, fungsi bersarang mempunyai beberapa kegunaan terhad. Jika kita ingin membuat fungsi bersarang seperti di bawah, ralat akan dihasilkan.
#include <stdio.h> main(void) { printf("Main Function"); int my_fun() { printf("my_fun function"); // defining another function inside the first function. int my_fun2() { printf("my_fun2 is inner function"); } } my_fun2(); }
text.c:(.text+0x1a): undefined reference to `my_fun2'
Tetapi sambungan kepada pengkompil GNU C membolehkan fungsi bersarang diisytiharkan. Untuk melakukan ini, kita perlu menambah kata kunci auto sebelum pengisytiharan fungsi bersarang.
#include <stdio.h> main(void) { auto int my_fun(); my_fun(); printf("Main Function</p><p>"); int my_fun() { printf("my_fun function</p><p>"); } printf("Done"); }
my_fun function Main Function Done
Atas ialah kandungan terperinci Dalam bahasa C, fungsi bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!