(un)signed short int (C)
Posted
技术标签:
【中文标题】(un)signed short int (C)【英文标题】: 【发布时间】:2014-07-03 08:04:43 【问题描述】:在本网站的另一个问题中已经确定,C 中没有文字后缀,可以执行以下操作:
short Number = (short)1;
但是投射和不投射有什么区别:
short Number = 1;
您使用哪种以及编译器如何以不同方式处理它们是否重要?
【问题讨论】:
当你像这样声明一个类型化变量时,它会“自动转换”为所述类型,所以没有区别。 这很重要,因为默认文字是 int,所以 int 的范围更大,因为 Mayarz 说它被隐式转换为 short,但是在高警告级别下,编译器不会喜欢这样(并且会总是喜欢明确的演员表)。 @harper : "取决于编译器的心情";这表明它不是确定性的并且可能会有所不同。它可能取决于编译器实现、编译器版本和编译器选项,而不是它的“心情”。无论哪种方式,两者都是有效的 C 并且在语义上是相同的 - C 编译器必须接受其中任何一种,而不管它可能输出的任何诊断信息。 【参考方案1】:隐式演员表和强制演员表的效果没有区别,强制演员表主要是“纪录片” - 它说“我故意这样做”。
显式转换让潜在的维护者很清楚,它们的类型是故意short
并且不应该更改以匹配初始化程序。它还可以用于使编译器或静态分析工具警告静音。但是,如果您提供的初始化程序对于短期而言太大 - 它也会消除任何警告。
显式转换在宏定义中可能更有用,例如:
#define DEFAULT_CONDITION ((short)1)
short condition = DEFAULT_CONDITION ;
【讨论】:
【参考方案2】:这两种情况下代码的行为是相同的。
但是,如果您将 int
分配给 short
(使用隐式转换),某些代码检查器/编译器可能会发出警告。
我知道的大多数工具都不会对字面值执行此操作。他们检查已知文字是否真正适合较小的类型。
【讨论】:
以上是关于(un)signed short int (C)的主要内容,如果未能解决你的问题,请参考以下文章
c语言的基本整型(int)和短整型(short)又啥不一样?这些有啥用?