“使用armcc

时间:2017-03-27 15:43:47

标签: c casting 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编译它。 谢谢!

1 个答案:

答案 0 :(得分:1)

  

我发现它很奇怪,因为flags变量来自uint32_t类型,而keyCert类型实际上是uint32_t。

错误,$http.get(url).then(function(response){ $scope.employees =response.data; }); 类型为keyCert。编译器不知道您是否在union {...}中存储struct cuint32_t d,因此编译器不能认为它是keyCert。 GCC可能不会抛出任何错误的原因是因为它是编译器扩展。 ISO C禁止此类铸造。

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

  

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