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

Apa yang Berlaku Semasa Penyusunan dan Pemautan dalam Fiasco Perintah Permulaan Statik C?

DDD
Lepaskan: 2024-12-11 01:00:10
asal
769 orang telah melayarinya

What Happens During Compilation and Linking in the C   Static Initialization Order Fiasco?

Static Initialization Order Fiasco

"static initialization order fiasco" (SIOF) merujuk kepada kemungkinan isu yang boleh berlaku apabila menggunakan data statik ahli dalam program C. Keadaan ini timbul apabila berbilang fail sumber mentakrifkan ahli data statik dengan kebergantungan bulat.

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:

Berdasarkan pada coretan kod yang diberikan, bolehkah anda menerangkan langkah berikut yang mungkin berlaku semasa penyusunan dan memaut?

  1. Dalam file1.cpp, adakah pengkompil memperuntukkan storan dan memulakan y?
  2. Dalam file1.cpp, adakah pengkompil memperuntukkan storan untuk x?
  3. Dalam file2.cpp, adakah pengkompil memperuntukkan storan dan memulakan x?
  4. Dalam file2.cpp, adakah pengkompil memperuntukkan storan untuk y?
  5. Semasa memaut, jika file2.o dimulakan dahulu, adakah x akan dimulakan dengan nilai 0?

Jawapan:

Mengikut standard C (3.6.2 "Initialization of objek bukan tempatan"), langkah berikut berlaku:

  1. Langkah 1: Sifar-Inisialisasi: Kedua-dua x dan y adalah sifar-dimulakan sebelum sebarang permulaan lain.
  2. Langkah 2: Permulaan Dinamik: Piawaian tidak menyatakan pembolehubah (x atau y) yang mana dimulakan terlebih dahulu. Salah satu daripadanya akan dimulakan dengan nilai 1, kerana ia mengakses nilai permulaan sifar bagi pembolehubah lain.
  3. Langkah 3: Permulaan Dinamik Pembolehubah Kedua: Pembolehubah yang tinggal akan dimulakan secara dinamik, memperoleh nilai 2.
  4. Oleh itu, jawapan kepada soalan kelima ialah tidak, x tidak dimulakan dengan nilai 0.

Atas ialah kandungan terperinci Apa yang Berlaku Semasa Penyusunan dan Pemautan dalam Fiasco Perintah Permulaan Statik 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan