我的代码中有几个#if 编译器选项来处理一些 if-else 分支、具体取决于协议栈的选项。
当使用 IDE 执行对标识块的括号匹配时、非编译分支(例如#else 分支)具有跳转到该区域的括号匹配机制、而不是实际活动代码。 因此,与编译输出代码匹配的大括号会变得不同步(代码可能正常,这可能只是一个 IDE 问题,需要验证)。
请参阅此示例、其中 SNAP_NUM_PREAMING_Bytes 为1 (>0)、这意味着此处的#else case 不包含在生成的代码中并呈灰色显示。 但是、大括号匹配会忽略灰显的段、并与找到的第一个大括号匹配、而不是编译后的实际大括号。 这会导致#else 语句上方的语句由于不匹配而出现括号不匹配。
#if ( SNAP_NUM_PREAMBLE_BYTES > 0 )                if ( rxChar == SNAP_PREAMBLE_BYTE ) {                    info_p->preamble_start = true;                    info_p->preamble_count++;                }                else if ( rxChar == SNAP_SYNC_BYTE ) {#else                if ( rxChar == SNAP_SYNC_BYTE ) {#endif                    // sync byte code#if ( SNAP_NUM_PREAMBLE_BYTES > 0 )                    // check preamble type                    switch ( info_p->preamble_type ) {                    case SNAP_PREAMBLE_NONE:                        info_p->rx_frame_state = SNAP_RXFS_HDR2;                        break;                    case SNAP_PREAMBLE_RELAXED:                        if ( info_p->preamble_count == 0 ) {                            info_p->fault_type = SNAP_FAULT_BAD_PREAMBLE;                            info_p->rx_frame_state = SNAP_RXFS_PROCESS_FAULT;                            redo_flag = true;                        }                        else {                            info_p->rx_frame_state = SNAP_RXFS_HDR2;                        }                        break;
<< ... >>

我没有检查生成的代码,但认为代码可能可以-此错误似乎只是 IDE 大括号匹配问题。 我的代码没有编译器问题;这只是编码/调试/可视化问题。
				
