sizeof()在c中的返回值?
这个问题在这里已经有了答案:
为什么这个程序会输出错误?
if(sizeof(int) > -1)
原因是sizeof返回size_t (无符号),所以在比较之前, -1被转换为无符号。
根据标准:
6.3.1.8通常的算术转换
....
否则,如果具有无符号整数类型的操作数的级别大于或等于另一操作数的类型的级别,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型。
请注意,如果第二个操作数的级别更高,则结果会不同。 我的编译器提供了true的long long :
if (sizeof(int) > -1LL)
sizeof返回size_t ( unsigned类型)。 你是一个比较signed int与unsigned int 。 当signed操作数相比unsigned之一, signed操作数地转化为一个unsigned价值。
关键字sizeof后跟省略号返回参数包中元素的数量。 结果的类型是头文件中定义的unsigned整型size_t 。 所以你在比较一个unsigned int和一个带符号的int。
