"Error #119: cast to type <..> is not allowed" 使用 armcc 时
"Error #119: cast to type <..> is not allowed" when using armcc
我正在尝试使用 armcc 编译现有项目(专为 gcc 设计)。
出于某种原因,我收到以下转换的 #119 错误:
(keyCert)(pCertHeader->flags)
我觉得很奇怪,因为flags变量来自类型uint32_t,而keyCert类型实际上是uint32_t。
typedef union {
struct {
uint32_t a:4;
uint32_t b:28;
}c;
uint32_t d;
} keyCert;
这种行为的原因可能是什么?
请注意,我能够使用 gcc 对其进行编译。
谢谢!
I find it very odd because the flags variable is from type uint32_t, and keyCert type is actually uint32_t.
错误,keyCert
类型是union {...}
。编译器不知道您在 keyCert
中存储的是 struct c
还是 uint32_t d
,因此编译器无法假定它是 uint32_t
。 GCC 可能不会抛出任何错误的原因是因为它是编译器扩展。 ISO C 禁止这种类型的转换。
即使在 GCC 中,如果您使用 C99 严格模式编译它,您也会收到以下消息:
warning: ISO C forbids casts to union type [-Wpedantic]
我正在尝试使用 armcc 编译现有项目(专为 gcc 设计)。 出于某种原因,我收到以下转换的 #119 错误:
(keyCert)(pCertHeader->flags)
我觉得很奇怪,因为flags变量来自类型uint32_t,而keyCert类型实际上是uint32_t。
typedef union {
struct {
uint32_t a:4;
uint32_t b:28;
}c;
uint32_t d;
} keyCert;
这种行为的原因可能是什么? 请注意,我能够使用 gcc 对其进行编译。 谢谢!
I find it very odd because the flags variable is from type uint32_t, and keyCert type is actually uint32_t.
错误,keyCert
类型是union {...}
。编译器不知道您在 keyCert
中存储的是 struct c
还是 uint32_t d
,因此编译器无法假定它是 uint32_t
。 GCC 可能不会抛出任何错误的原因是因为它是编译器扩展。 ISO C 禁止这种类型的转换。
即使在 GCC 中,如果您使用 C99 严格模式编译它,您也会收到以下消息:
warning: ISO C forbids casts to union type [-Wpedantic]