+ -
当前位置:首页 → 问答吧 → 关于强制类型转换的讨论。。。

关于强制类型转换的讨论。。。

时间:2011-12-19

来源:互联网

最近在阅读一段代码时,遇到一个强制类型准换,与常用的有点区别。不知道强制转换后的值是多少?忘各位高手解读一下。

这里定义了一个枚举类型,
typedef enum 
{
HVAC_FAULT = 0,
MVB_FAULT = 1,
}SystemFaultTypeDef ;

for(SysmtenIndx=0;SysmtenIndx<2;SysmtenIndx++)
{
  SetElementFault(&A,(SystemFaultTypeDef)SysmtenIndx,B);
}

这样(SystemFaultTypeDef)SysmtenIndx强制类型转换出来的值是什么?望高手指导一下,这样枚举型强制类型转换以前没有见过。而且更变态的是即使这样强制类型转换出来的值与本身For循环里的赋值有什么区别?
不用强制类型转换得到的第二个参数的值不是0,就是1.使用了强制转换得到的值也是0或者1.这样搞一下什么用意呢?
忘大家帮忙解释一下,不胜感激!

作者: jetlee2012   发布时间: 2011-12-19

这个应该跟SetElementFault的定义有关,
他的第二个参数类型是应该是SystemFaultTypeDef这样做强转可以在程序编译的时候少一个warning。
这是编程习惯问题,编的程序多了就会注意这个问题。

作者: WYJXHL97   发布时间: 2011-12-19

我想要不要这个转换符效果都是一样的,只是为了更容易理解,代码更清晰一点。

作者: zhumengshu1   发布时间: 2011-12-19

回复#1楼
void SetElementFault(A,SystemFaultTypeDef Type,B);

这是SetElementFault函数的声明,在声明中指明了第二个参数是枚举类型。但是还是有点疑惑这种枚举类型是数值型的,假设我们将枚举类型替换成两个枚举字符x,y。
typedef enum  

HVAC_FAULT = x,
MVB_FAULT = y,
}SystemFaultTypeDef ;

那么(SystemFaultTypeDef)SysmtenIndx强制类型转换后的值是x,y吗?

作者: jetlee2012   发布时间: 2011-12-19

引用 1 楼 wyjxhl97 的回复:
这个应该跟SetElementFault的定义有关,
他的第二个参数类型是应该是SystemFaultTypeDef这样做强转可以在程序编译的时候少一个warning。
这是编程习惯问题,编的程序多了就会注意这个问题。

void SetElementFault(A,SystemFaultTypeDef Type,B);

这是SetElementFault函数的声明,在声明中指明了第二个参数是枚举类型。但是还是有点疑惑这种枚举类型是数值型的,假设我们将枚举类型替换成两个枚举字符x,y。
typedef enum  
{  
HVAC_FAULT = x,
MVB_FAULT = y,
}SystemFaultTypeDef ;

那么(SystemFaultTypeDef)SysmtenIndx强制类型转换后的值是x,y,还是这样就根本转换不过去应为没有匹配的转换值?

作者: jetlee2012   发布时间: 2011-12-19

作者: zhutou100hao   发布时间: 2011-12-19

引用 3 楼 jetlee2012 的回复:
回复#1楼
void SetElementFault(A,SystemFaultTypeDef Type,B);

这是SetElementFault函数的声明,在声明中指明了第二个参数是枚举类型。但是还是有点疑惑这种枚举类型是数值型的,假设我们将枚举类型替换成两个枚举字符x,y。
typedef enum
{
HVAC_FAULT = x,
MVB_FAULT = y,
}……


在声明中指明了第二个参数是枚举类型,而你的SysmtenIndx应该是int型吧,所以要强制转换啊,
枚举型是常量:值定义为0,1,2。。。但是不能直接把一个整形数赋值给枚举型的,2者属于不同的类型
你这里是一个整形数据的循环,依次在函数中带入相应的枚举元素,即:循环值为1时,带入枚举元素MVB_FAULT,这样来理解

HVAC_FAULT = 0,
MVB_FAULT = 1,
其中HVAC_FAULT才是枚举元素,0,1,2只是起到枚举元素定义时顺序和判断比较的作用

HVAC_FAULT = x,
MVB_FAULT = y,
这样做是错误的,不能定义为x,y

作者: yuzhenhua001   发布时间: 2011-12-19