GNU/Linux >> Belajar Linux >  >> Linux

implementasi sizeof operator

sizeof operator adalah bagian dari spesifikasi bahasa C (dan C++), dan diimplementasikan di dalam kompiler (ujung depan). Tidak ada cara untuk mengimplementasikannya dengan konstruksi C lainnya (kecuali jika Anda menggunakan ekstensi GCC seperti typeof) karena dapat menerima tipe atau ekspresi sebagai operan, tanpa membuat efek samping apa pun (mis. sizeof((i>1)?i:(1/i)) tidak akan mogok saat i==0 tapi makro Anda my_sizeof akan crash dengan pembagian dengan nol). Lihat juga pedoman pengodean C, dan wikipedia.

Anda harus memahami aritmatika pointer C. Lihat mis. pertanyaan ini. Perbedaan penunjuk dinyatakan dalam elemen, bukan byte.


Hasil pengurangan pointer ada di elemen dan bukan dalam byte. Jadi ekspresi pertama dievaluasi menjadi 1 menurut definisi.

Selain itu, Anda benar-benar harus menggunakan tanda kurung di makro:

#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)

Kalau tidak, coba gunakan my_sizeof() dalam ekspresi dapat menyebabkan kesalahan.


Linux
  1. -eq:Operator Unary Diharapkan?

  2. 7 Contoh Operator Awk yang Kuat (Unary, Binary, Arithmetic, String, Assignment, Conditional, Reg-Ex Awk Operators)

  3. 7 Contoh Operator Linux Grep OR, Grep AND, Grep NOT

  1. C ++ keamanan utas operator baru di linux dan gcc 4

  2. Implementasi beberapa pipa di C

  3. Implementasi variabel kondisi

  1. Apakah akses ke tumpukan serial?

  2. Implementasi celah udara untuk penggunaan komputer pribadi

  3. Apa implementasi Linux sekecil mungkin?