Rumah > pembangunan bahagian belakang > C++ > Mengapakah g dan clang Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Piawaian Melarangnya?

Mengapakah g dan clang Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Piawaian Melarangnya?

Patricia Arquette
Lepaskan: 2024-12-30 09:06:17
asal
194 orang telah melayarinya

Why Do g   and clang   Accept Variable Length Arrays (VLAs) in C   Despite the Standard Prohibiting Them?

Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Status Bukan Standard

Walaupun C tidak menyokong Tatasusunan Panjang Berubah (VLA) secara rasmi ), kedua-dua pengkompil g dan clang secara mengejutkan menerimanya sebagai sintaks yang sah. Ini menimbulkan persoalan tentang gelagat pengkompil dan kedudukan standard pada VLA.

Penerimaan Pengkompil

Penyusun C seperti g dan clang membenarkan VLA sebagai sambungan bukan standard. Ini mungkin disebabkan oleh keserasian sejarah dengan penyusun C lama yang membenarkan pengisytiharan sedemikian.

Definisi Standard

Piawaian C melarang VLA mengikut peraturan tatabahasa dalam [dcl. tatasusunan]. Hanya ungkapan malar dibenarkan untuk menentukan saiz tatasusunan. Dalam kod contoh yang disediakan, n bukan ungkapan tetap, menjadikan pengisytiharan VLA tidak sah mengikut standard.

Butiran Pelaksanaan

Walaupun bukan standard, VLA dalam C sering dilaksanakan dengan memperuntukkan memori pada tindanan dan menggunakan gelung untuk mengakses elemen. Walau bagaimanapun, tingkah laku ini bergantung kepada pengkompil dan mungkin berbeza-beza merentasi pelaksanaan yang berbeza.

Implikasi

  • VLA dalam C dianggap sebagai sambungan pengkompil dan tidak boleh dipercayai .
  • Kod yang mengandungi VLA mungkin menunjukkan gelagat berbeza bergantung pada pengkompil digunakan.
  • Adalah tidak digalakkan untuk menggunakan VLA dalam kod yang bertujuan untuk mudah alih merentas pengkompil C yang berbeza.

Pengesyoran

Untuk kemudahalihan kod dan untuk memastikan pematuhan dengan standard C, adalah disyorkan untuk menggunakan peruntukan memori dinamik (cth., baru[]) untuk mencipta tatasusunan yang saiznya tidak diketahui pada masa penyusunan.

Atas ialah kandungan terperinci Mengapakah g dan clang Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Piawaian Melarangnya?. 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