Rumah >pembangunan bahagian belakang >C++ >Mengapakah `sizeof(void)` tidak sah dalam C, tetapi dinilai kepada 1 dalam 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!