mam kod:Dlaczego konwersja z size_t na unsigned int daje mi ostrzeżenie?
unsigned int length = strlen(somestring);
mam kompilacją z poziomu ostrzegawczego na 4, a to mówi mi, że „konwersja z size_t
do unsigned int
, możliwa utrata danych” Kiedy size_t
jest typedef
dla unsigned int
.
Dlaczego?
Edytuj:
Właśnie rozwiązałem mój własny problem. Jestem użytkownikiem XP, a mój kompilator sprawdzał kompatybilność 64-bitową. Ponieważ size_t
jest zależny od platformy, dla 64-bitów będzie to unsigned long long
, gdzie to nie jest tożsame z unsigned int
.
Wszystkie rozmiary są zależne. 'size_t' nie musi się równać z żadnym innym typem, wszystkie mogą być różne. Jedyna gwarancja jaką masz to 'sizeof (char) == 1' oraz że liczba bitów w' char' (która jest również zależna!) Jest zdefiniowana w makro 'CHAR_BIT' w nagłówku' ', i że 'sizeof (short)> = sizeof (char)', 'sizeof (int)> = sizeof (long)' i 'sizeof (long long)> = sizeof (long)'. –
GManNickG
@GMan: Właściwie uważam, że 'sizeof (long)> = sizeof (int)' :) +1 though –
@Billy: Oh dangit. Teraz jest za późno, aby to naprawić. -_- No cóż. : 3 – GManNickG