"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]