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。