2012-06-02 14 views
7

Powiel możliwe:
size of a datatype without using sizeofzaimplementować własną sizeof

jeden z moich znajomych ostatnio pojawiła się w wywiadzie NVIDIA gdzie został poproszony o implement his own sizeof in C. Próbowałem zrobić to samo dla praktyki i napisałem dwie różne definicje: sizeof, z których jedna może obsługiwać zmienne, a druga obsługuje typy danych, ale nie jestem w stanie połączyć tych dwóch. Czy jest jakiś sposób to zrobić? Ponadto, jest to możliwe do wykonania kompletnego sizeof w C.

rodzaje obchodzić jak int, char itp

#define my_sizeof(type) ((size_t)(((type *)0) + 1)) 

Uchwyty zmienne jak x

#define my_sizeof(var) (size_t)((char *)(&var+1)-(char*)(&var)) 
+0

Oczywiście, te działają tylko dlatego, że kompilator jest skutecznie wywołanie sizeof() pod maską. .. :) –

+0

Dobrym pomysłem dla uczącego się takiego jak ty jest zaimplementowanie container_of i offset_of makr. Dobra nauka! – Saurabh

+0

Jednym z powodów, dla których jest to trudne/niemożliwe, jest oczywiście, że 'sizeof' nie jest funkcją. To pytanie brzmi trochę "czy istnieje sposób wdrożenia' = 'w C, bez użycia' = '?". – unwind

Odpowiedz

1

Dobre pytanie

  1. I nie widzę sposobu na połączenie tych dwóch.

  2. Realizacja obsłużyć drugi jest niebezpieczne

co jeśli użytkownik robi

sizeof (*ptr) 

sizeof (func()) 
+0

myślałem o tych również, ale może być wiele innych sposobów, aby użyć sizeof ... postanowiłem najpierw spróbować wprowadzić te najbardziej powszechne, a następnie bardziej złożone ... ale utknąłem na łączeniu część .... –

Powiązane problemy