Rumah > pembangunan bahagian belakang > C++ > Apa yang Berlaku Semasa Fiasco Perintah Permulaan Statik dalam C ?

Apa yang Berlaku Semasa Fiasco Perintah Permulaan Statik dalam C ?

Patricia Arquette
Lepaskan: 2024-12-11 02:05:09
asal
433 orang telah melayarinya

What Happens During Static Initialization Order Fiasco in C  ?

Enigma "Static Initialization Order Fiasco" Didedahkan

"static initialization order fiasco" (SIOF) yang terkenal timbul apabila berbilang fail dalam program C mengandungi pembolehubah statik yang bergantung antara satu sama lain untuk permulaan. Pertimbangkan contoh berikut:

// file1.cpp
extern int y;
int x = y + 1;

// file2.cpp
extern int x;
int y = x + 1;
Salin selepas log masuk

Soalan:

  1. Semasa penyusunan fail1.cpp, adakah pengkompil:

    • Peruntukkan storan untuk y?
    • Mulakan x?
  2. Semasa penyusunan fail2.cpp, adakah pengkompil:

    • Peruntukkan storan untuk x?
    • Memulakan y ?
  3. Apabila memaut file1.o dan file2.o, jika file2.o dimulakan dahulu, adakah:

    • x menerima nilai awal 0?
    • x kekal tidak dimulakan?

Jawapan:

Mengikut standard C (3.6.2 "Inisialisasi objek bukan tempatan"):

  1. a. Penyusun adakah tidak memperuntukkan storan untuk y.
    b. Pengkompil memperuntukkan storan untuk x tetapi tidak memulakannya.
  2. a. Pengkompil tidak tidak memperuntukkan storan untuk x.
    b. Pengkompil memperuntukkan storan untuk y tetapi tidak memulakannya.
  3. a. x menerima nilai awal daripada 0.
    b. x tidak kekal tidak dimulakan.

Penjelasan:

  • Langkah 1: x dan y ialah dimulakan sifar sebelum sebarang permulaan lain.
  • Langkah 2: Sama ada x atau y dimulakan secara dinamik (standard tidak menentukan yang mana). Pembolehubah yang dimulakan menerima nilai 1, kerana pemboleh ubah lain adalah dimulakan sifar.
  • Langkah 3: Pembolehubah lain kemudiannya dimulakan secara dinamik, menerima nilai 2.

Atas ialah kandungan terperinci Apa yang Berlaku Semasa Fiasco Perintah Permulaan Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan