1

我正在尝试用 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 编译它。谢谢!

4

1 回答 1

2

我觉得这很奇怪,因为 flags 变量来自 uint32_t 类型,而 keyCert 类型实际上是 uint32_t。

错了,keyCert类型是union {...}。编译器不知道你是 storestruct c还是uint32_t din keyCert,所以编译器不能假设它是uint32_t. GCC 可能不会抛出任何错误的原因是因为它是编译器扩展。ISO C 禁止这种类型的铸造。

即使在 GCC 中,如果您使用 C99 严格模式编译它,您也会收到以下消息:

警告:ISO C 禁止强制转换为联合类型 [-Wpedantic]

于 2017-03-27T16:00:55.787 回答