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

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