检查一个整数类型的值是否适合另一个整数类型
Type1
和Type2
有两种类型,由不同的头提供,对于某些整数类型都是typedef,但不知道哪些(并且可能在编译器,操作系统等方面有所不同)。 该程序是否保证正常工作(如果它编译)
Type1 a = ...; if (a == (Type2) a) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); }
或者是否有我不考虑的角落案件?
如果您只担心条目的大小 ,请使用sizeof
:
if (sizeof(a) == sizeof(Type2)) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); }
不,我认为不幸的是这还不够。 如果例如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
时是否有信息丢失。