Citat:
vlaiv: Da, ali pod uslovom
1. Da je polje koje windows funkciji govori size strukture uvek na prvom mestu i 32bit-a ... (koliko ljudi to zna i vodi racuna o tome)
2. da kompajler automatski dodeli nule svuda (koliko ljudi to zna i vodi racuna o tome, i da li je sa svakim kompajlerom to slucaj)
3. Sta ako neko dinamicki alocira memoriju za strukturu pa proba taj kod? (za funkcije koje u odredjenim slucajevima ne popunjavaju
default 0 polja sa 0 pa ostane recimo 13 :) - znas na sta mislim)
1. U ovom slučaju polje jeste prvo i jeste 32-bit.
2. Standard c++ kaže da u slučaju delimične inicijalizacije strukture alocirane na steku - ostala neinicijalizovana polja se GARANTOVANO popunjavaju nulama.
3. Ako neko dinamički alocira neku strukturu i pokuša da je inicijalizuje na takav način onda je nedovoljlno upućen u c++ i treba da se lati neke pristojne knjige. A ako ipak to i uradi svaki kompajler će prijaviti da je to nedozvoljena operacija.
Treba da shvatiš da je moj primer namenjen samo konkretnom slučaju OSVERSIONINFO strukture i to samo u slučaju da je alocirana na steku.
Generalizovano pravilo bi glasilo ovako za bilo koju strukturu:
Code:
<NEKASTRUKTURA> <promenjiva> = {}; //inicijalizuje celu strukturu nulama
<promenjiva>.<veličina_strukture> = sizeof(<NEKASTRUKTURA>);