无效的C99 IL表达类型

时间:2014-08-13 22:47:20

标签: c c99 vxworks

我正在编写VxWorks项目的应用程序,因此使用diab编译器。现在,我试图将void*投射到MyType*,但我得到一些奇怪的错误,我做错了什么我想知道,我的代码:

 int switch_transaction_management(map_type_t pType, void* pData)
 {
     switch_port_t pPort;
     switch_VID_t pVid;
     switch_vpws_t pVpws;

        switch (pType) {
        case MAP_TYPE_PORT:
            pPort = (switch_port_t*) pData;
...
...

我得到的错误是:

: internal error: assertion failed: Invalid C99 IL expression kind (./../src/eparse/lower_c99.c, line 3690)
            pPort = (switch_port_t*) pData;

对我来说,没有任何意义吗?

1 个答案:

答案 0 :(得分:2)

您的代码不正确。你有:

switch_port_t pPort;

接下来是:

pPort = (switch_port_t*) pData;

您尝试将类型switch_port_t*的值分配给类型为switch_port_t的对象,该对象无效且应该导致编译器发出错误消息。

您使用的编译器也不正确。您的代码不是发出错误消息,而是触发了编译器本身的错误:

internal error: assertion failed: Invalid C99 IL expression kind (./../src/eparse/lower_c99.c, line 3690)

(" IL"可能是" Intermediate Language"的缩写,编译器内部使用的东西。)

您应该更正您的代码(它可能会避免触发编译器错误)。我不知道您是否应该放弃演员*或更改pPort的声明。

正如Deduplicator建议的那样,您还应该将编译器错误报告给您正在使用的编译器的维护者。提供一个小型测试用例,展示问题以及关于您的环境,您正在使用的编译器版本等似乎合理(或更多)的信息。