Rumah >pembangunan bahagian belakang >C++ >Mengapakah `sizeof(void)` tidak sah dalam C, tetapi dinilai kepada 1 dalam GCC?

Mengapakah `sizeof(void)` tidak sah dalam C, tetapi dinilai kepada 1 dalam GCC?

Linda Hamilton
Linda Hamiltonasal
2024-11-16 12:26:03758semak imbas

Why is `sizeof(void)` invalid in C, but evaluates to 1 in GCC?

Memahami Saiz Void

Dalam pengaturcaraan C, kata kunci void menandakan jenis data yang tidak mempunyai saiz. Sifat pelik ini menjadikannya tidak layak untuk pengisytiharan boleh ubah atau tugas peruntukan memori.

Ralat Penyusunan: Peruntukan Penunjuk Tidak Sah

Coretan kod yang anda berikan:

void *p = malloc(sizeof(void));

akan mengakibatkan ralat kompilasi kerana sizeof(void) ialah ungkapan tidak sah dalam C. Jenis void tidak membawa maklumat saiz, menjadikan operasi ini tidak ditentukan dan oleh itu ditolak oleh pengkompil.

Sizeof (kosong) dalam GCC: Satu Pengecualian

Anehnya, ungkapan sizeof(void) disusun dalam pengkompil GNU C (GCC). Ia menilai kepada 1, menunjukkan satu bait memori. Walau bagaimanapun, tingkah laku ini tidak standard dan berbeza-beza merentasi penyusun dan seni bina yang berbeza.

Peningkatan Penunjuk dengan Penunjuk Void

Soalan anda tentang penambahan p dengan p menimbulkan konsep yang menarik. Oleh kerana lompang tidak mempunyai saiz, operasi p menjadi tidak bermakna. Penunjuk p tidak menunjuk kepada mana-mana jenis data atau nilai tertentu, jadi penambahannya tidak akan memberi kesan pada nilainya.

Ringkasnya, void dalam C ialah jenis data tanpa saiz dan tidak boleh digunakan untuk ingatan peruntukan atau pengisytiharan berubah-ubah. Ungkapan sizeof(void) biasanya tidak sah, tetapi mungkin berkelakuan berbeza dalam pengkompil tertentu seperti GCC. Disebabkan kekurangan saiz, percubaan untuk menambah penunjuk kosong dengan p tidak mempunyai hasil yang bermakna.

Atas ialah kandungan terperinci Mengapakah `sizeof(void)` tidak sah dalam C, tetapi dinilai kepada 1 dalam GCC?. 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