Rumah >pembangunan bahagian belakang >C++ >Adakah Permulaan Separa Struktur dan Tatasusunan Automatik dalam C dan C Dibenarkan dan Ditakrifkan?

Adakah Permulaan Separa Struktur dan Tatasusunan Automatik dalam C dan C Dibenarkan dan Ditakrifkan?

Barbara Streisand
Barbara Streisandasal
2024-12-11 08:49:10961semak imbas

Is Partial Initialization of Automatic Structures and Arrays in C and C   Allowed and Defined?

Pemulaan Separa Struktur dan Tatasusunan Automatik dalam C dan C

Salah tanggapan berpunca daripada andaian yang salah bahawa permulaan separa bagi struktur dan tatasusunan automatik dibenarkan dalam C. Bertentangan dengan kepercayaan ini, piawaian secara eksplisit mentakrifkan hanya dua kes: lengkap pemulaan atau tiada pemulaan.

Pemulaan Separa

Istilah "pemulaan separa" tidak ditakrifkan dalam piawaian. Ia merujuk kepada pemulaan hanya subset ahli dalam struktur atau tatasusunan.

Permulaan Lengkap

Pemulaan lengkap berlaku apabila semua ahli struktur atau tatasusunan dimulakan secara eksplisit. Contohnya:

struct somestruct {
  int a;
  int b;
  int c;
};

somestruct s = {1, 2, 3};

Tiada Permulaan

Apabila tiada pemulaan disediakan, tingkah laku bergantung pada jenis storan pembolehubah:

  • Untuk pembolehubah automatik (pada tindanan), ahli yang tidak dimulakan tidak dijamin untuk dimulakan. Nilainya tidak dapat ditentukan.
  • Untuk pembolehubah statik (dengan skop global atau fail), ahli yang tidak diinisialisasikan dimulakan kepada 0 untuk jenis kamiran dan NULL untuk ahli penunjuk.

Separa Permulaan dalam Amalan

Walaupun bukan tingkah laku standard, permulaan separa automatik ahli struktur dan tatasusunan disokong oleh kebanyakan penyusun, termasuk Visual Studio dan gcc/g .

C Standard (C99)

Bahagian 6.7.8.21 Permulaan

Jika lebih sedikit pemula disediakan daripada bilangan elemen atau ahli dalam agregat, elemen selebihnya dimulakan kepada 0.

C Standard (C 03)

Bahagian 8.5.1 Agregat

Jika lebih sedikit pemula hadir, ahli yang tidak dimulakan adalah dimulakan nilai. Permulaan nilai berbeza berdasarkan jenis objek. Sebagai contoh, ahli data bukan statik jenis kelas bukan kesatuan adalah dimulakan nilai, manakala jenis primitif seperti integer dimulakan sifar.

Kesimpulan

Separa pemulaan struktur automatik dan tatasusunan ialah tingkah laku bukan standard yang boleh membawa kepada hasil yang tidak ditentukan jika tidak dikendalikan dengan betul. Untuk memastikan kemudahalihan dan ketepatan, sentiasa pastikan pemulaan lengkap atau tiada pemulaan.

Atas ialah kandungan terperinci Adakah Permulaan Separa Struktur dan Tatasusunan Automatik dalam C dan C Dibenarkan dan Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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