好的,这可能是在黑暗中拍摄的。
我正在编写一个软件工具,以使用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/