C编译器是否可以省略对具有与源类型相同的基础类型的类型的强制转换?

时间:2016-07-11 16:45:23

标签: c casting

最近我在C中遇到了以下代码:

typedef enum { AAA, BBB } enumtype;
enumtype var;
void func(uint8_t* par);

..

func(&(uint8_t)var);

对我来说,这是一个废话,因为我们将临时变量的地址(转换的结果)作为参数传递给函数。但令我惊讶的是,编译器没有抱怨。重要的是,根据编译选项将枚举存储为一个字节,因此在强制转换后面没有隐藏任何实际操作。当我将uint8_t更改为uint16_t时,编译器 - 如预期的那样 - 由于非l值的地址而引发了错误。

typedef enum { AAA, BBB } enumtype;
enumtype var;
void func(uint16_t* par);

..

func(&(uint16_t)var);

现在的问题是:如果变量的基础类型和它的类型的基础类型相同,编译器是否允许(根据C标准)跳过转换?

0 个答案:

没有答案
相关问题