有两种类型的Type1和Type2由不同的头提供,对于某些整数类型,这两种类型都是typedefs,但不知道是哪种类型(并且在编译器、OSes等方面可能是不同的)。这个程序能保证正常工作吗(如果它编译的话)
Type1 a = ...;
if (a == (Type2) a) {
printf("a fits into Type2");
else {
printf("a doesn't fit into Type2");
}或者,有没有我没有考虑到的角落情况?
发布于 2010-11-10 17:33:27
不,我认为不幸的是这还不够。例如,如果Type1为short,而Type2为int,则左侧的值仍将提升为int。因此,您是在比较相同类型的相同值。
此外,确保进行比较,这两种方式通常都不会有帮助。
你需要做的就是确保你以两种方式进行比较,并且你转换的值是一个如果转换成更窄的类型就会被截断的值。如果这两个类型都是无符号类型,则可以使用类似于
((T1)-1 == (T1)(T2)(T1)-1) && ((T2)-1 == (T2)(T1)(T2)-1)这还具有作为编译时表达式的优点。
如果这两个类型中的一个或两个都是带符号的,这将更加困难,因为在C中允许使用不同的符号表示法。
编辑:当我写这篇文章的时候,我不知何故忽略了你只想要一个方向。
(T1)-1 == (T1)(T2)(T1)-1只会告诉你在从T1转换到T2时是否有信息丢失。
https://stackoverflow.com/questions/4142557
复制相似问题