【发布时间】:2017-06-20 19:33:10
【问题描述】:
在C语言中,unsigned直接作为类型和unsigned int有区别吗?
更新: 这是this question 的副本,但另一个问题没有回答关于可能存在的小细节。感谢@EOF 指出位域中实现定义的行为。
【问题讨论】:
-
不,类型是一样的。
-
那里没有小细节?
-
不,就像
shortvsshort int或longvslong int:int在合格时是可选的。 -
@FSMaxB 参见 C11 标准草案 n1570:5 每个逗号分隔的多重集指定相同的类型,除了位域,它是实现定义的,说明符 int 是否指定与signed int 类型相同或与unsigned int 类型相同。 所以唯一的微妙之处在于位域。
-
@FSMaxB:编译器绝对对声明类型
int的位域使用不同的符号。它是现实世界中遇到的实现定义行为的典型示例之一。例如,结构中的int i:1可以初始化为.i = 1;并因此将不等于 与1 进行比较:.i != 1为真。当程序使用不同的编译器或针对不同的目标编译时,它还可以比较相等。
标签: c unsigned unsigned-integer