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

Linda Hamilton
Lepaskan: 2024-11-16 12:26:03
asal
682 orang telah melayarinya

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));
Salin selepas log masuk

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!

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