2010-04-03 134 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

相关问题