Array of Zero Length
Dalam C , adalah mungkin untuk mentakrifkan struct yang mengandungi tatasusunan sifar panjang. Ini dirujuk sebagai C-Hack dan boleh berguna dalam situasi tertentu.
Kajian Kes
Pemfaktoran semula kod baru-baru ini mendedahkan beberapa struct dengan tatasusunan panjang sifar, seperti sebagai:
struct someData { int nData; BYTE byData[0]; }
Mengapa Panjang Sifar Tatasusunan?
Biasanya, pengkompil menjana amaran untuk tatasusunan panjang sifar, tetapi dalam kes ini, amaran telah ditindas. Satu sebab yang mungkin untuk menggunakan tatasusunan panjang sifar adalah untuk membenarkan penciptaan tatasusunan dengan sebarang panjang semasa masa jalan.
Mencipta Struktur dengan Tatasusunan Panjang Sifar
Percubaan untuk mencipta struktur baharu dengan tatasusunan panjang sifar menggunakan operator "baru" akan mengakibatkan ralat. Sebaliknya, teknik berikut boleh digunakan:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
Fungsi ini memperuntukkan memori untuk objek jenis someData dan tatasusunan byDatanya dengan saiz yang ditentukan.
Pendekatan Alternatif
Dalam banyak kes, pendekatan yang lebih sesuai ialah menggunakan penunjuk atau tatasusunan panjang 1 dan bukannya susunan panjang sifar. Ini akan menghapuskan keperluan untuk peruntukan memori tersuai dan menjadikan kod lebih mudah dibaca dan diselenggara.
Kesimpulan
Tatasusunan panjang sifar boleh menjadi teknik yang berguna dalam situasi tertentu, tetapi mereka harus digunakan dengan berhati-hati. Dalam kebanyakan kes, pendekatan alternatif, seperti penunjuk atau tatasusunan panjang 1, adalah lebih sesuai dan akan menjadikan kod lebih mudah untuk difahami dan dikekalkan.
Atas ialah kandungan terperinci Mengapa Menggunakan Tatasusunan Sifar-Panjang dalam C Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!