好的,这可能是在黑暗中拍摄的。

我正在编写一个软件工具,以使用USB数据传输为应用程序测试一些代码。我不能在线发布代码,也不能给出代码确切功能的很多细节,但是我可以发布引发此异常错误的循环。

当我尝试编译存在该循环的源文件时,遇到许多语法错误(您看到不适用)和此错误error C2181: illegal else without matching if(您也看到不适用)。我知道这段代码可以在正常的操作环境中工作,但是我确实需要对其进行任何可能的漏洞测试。有人有什么想法吗?

特别是这里的循环。它处理确定从USB接收的消息是否完整:

void _usb_rx_complete(_message_union_t *buf_ptr)
{
    if(buf_ptr == &s_msg_buf[0].buffer)
    {
        s_msg_buf[0].is_complete = 0;
        s_msg_buf[0].byte_index = 0;
    }
    else if(buf_ptr == &s_msg_buf[1].buffer)
    {
        s_msg_buf[1].is_complete = 0;
        s_msg_buf[1].byte_index = 0;
    }
}


通常这是由if语句后的分号引起的,但是我很干净。另外,如果我注释掉此循环,则不会收到上述任何错误,因此我认为这与程序的另一部分无关。 if和else段中的语法错误均为error C2059: syntax error : '=='error C2143: syntax error : missing ';' before '{' ...有什么想法吗?

谢谢

最佳答案

您的代码没有明显的语法错误,但是编译器仍将语法错误作为输出,通常指出与预处理器相关的问题。由于发布整个源代码显然是一个问题,因此这里有一些如何定位它们的指针。

首先,请检查文件中定义的任何#define或宏,或者检查失败的表达式中您知道是宏的符号。

如果这样做不能帮助您发现问题,则this page会告诉您如何在Visual Studio中启用预处理器输出到文件的功能,并检查几乎总是可以帮助发现问题的输出。

关于c++ - c非法,否则不匹配,如果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17979829/

10-09 08:07
查看更多