Permulaan Pembolehubah Statik Tahap Fungsi
Dalam C, pembolehubah statik peringkat fungsi ialah mekanisme yang berguna untuk mengekalkan keadaan dalam fungsi. Walau bagaimanapun, proses peruntukan dan permulaannya kadangkala menimbulkan persoalan.
Tidak seperti pembolehubah yang diisytiharkan secara global, yang diperuntukkan dan dimulakan pada permulaan program, pembolehubah statik peringkat fungsi tidak diperuntukkan atau dimulakan sehingga fungsi dipanggil buat kali pertama .
Pertimbangkan coretan kod berikut:
void doSomething() { static bool globalish = true; // ... }
Dalam contoh ini, pembolehubah statik globalish tidak akan diperuntukkan atau dimulakan sehingga fungsi doSomething() digunakan. Untuk menunjukkan ini, mari kita menganalisis program ujian:
#include <iostream> class test { public: test(const char *name) : _name(name) { std::cout << _name << " created" << std::endl; } ~test() { std::cout << _name << " destroyed" << std::endl; } std::string _name; }; test t("global variable"); void f() { static test t("static variable"); test t2("Local variable"); std::cout << "Function executed" << std::endl; } int main() { test t("local to main"); std::cout << "Program start" << std::endl; f(); std::cout << "Program end" << std::endl; return 0; }
Setelah penyusunan dan pelaksanaan, output mendedahkan bahawa pembina untuk pembolehubah statik t dalam fungsi f() tidak dipanggil sehingga fungsi itu dipanggil untuk kali pertama:
global variable created local to main created Program start static variable created Local variable created Function executed Local variable destroyed Program end local to main destroyed static variable destroyed global variable destroyed
Oleh itu, pembolehubah statik peringkat fungsi tidak diperuntukkan atau dimulakan pada permulaan program, sebaliknya pada pemanggilan pertama fungsi di mana ia ditakrifkan.
Atas ialah kandungan terperinci Bilakah pembolehubah statik peringkat fungsi dalam C dimulakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!