好吧,这可能是在黑暗中拍摄的。
我正在编写一个软件工具来测试使用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 '{'
......有什么想法吗?
由于
答案 0 :(得分:2)
您的代码没有明显的语法错误,但编译器仍然将语法错误作为输出,这通常指向与预处理器相关的问题。由于发布您的整个源代码显然是一个问题,这里有一些指示如何找到它们;
首先,检查文件中定义的任何#define
或宏,或失败表达式中您知道是宏的符号。
如果这对查找问题没有帮助,this page会告诉您如何在Visual Studio中启用预处理器输出到文件,检查几乎总能帮助找到问题的输出。