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
330 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!

sumber:php.cn
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