我正在编写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;
对我来说,没有任何意义吗?
答案 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建议的那样,您还应该将编译器错误报告给您正在使用的编译器的维护者。提供一个小型测试用例,展示问题以及关于您的环境,您正在使用的编译器版本等似乎合理(或更多)的信息。