2010-04-03 135 views
5

我的代碼:爲什麼從size_t轉換爲unsigned int會給我一個警告?

unsigned int length = strlen(somestring); 

我與4警告級別編譯和它告訴我,「轉化率從size_tunsigned int,可能丟失數據」當size_t是一個一個typedefunsigned int

爲什麼?

編輯:

我剛剛解決了我自己的問題。我是XP用戶,我的編譯器正在檢查64位兼容性。由於size_t是平臺相關的,對於64位,它將是unsigned long long,這與unsigned int不一樣。

+1

所有尺寸都相關。 'size_t'不必等於任何其他類型,它們都可以不同。唯一的保證就是sizeof(char)== 1',並且'char'中的位數(也取決於!)在頭文件''的宏'CHAR_BIT'中定義,並且sizeof(short)> = sizeof(char),sizeof(int)> = sizeof(long)和sizeof(long long)> = sizeof(long)'。 – GManNickG 2010-04-03 03:12:57

+0

@GMan:其實我相信'sizeof(long)> = sizeof(int)':) +1雖然 – 2010-04-03 03:20:28

+0

@Billy:哦,dangit。現在修復已經太遲了。 -_- 好吧。 :3 – GManNickG 2010-04-03 03:22:27

回答

8

因爲unsigned int是比size_t更窄的類型。最可能的size_t是64位寬,而unsigned int是32位寬。

編輯:size_t不是unsigned int的typedef。

+0

那麼'size_t' _is_是一些系統上'unsigned'的typedef。它不會在LP64和LLP64系統上。 :-) – 2010-04-03 02:45:03

+0

@詹姆斯麥克奈利斯:也許吧,但是標準並沒有這樣定義:) – 2010-04-03 02:47:04

相關問題