0

わかりました、これは暗闇でのショットかもしれません。

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 ステートメントの後のセミコロンが原因ですが、私はそこをきれいにしています。さらに、このループをコメントアウトすると、上記のエラーは発生しないため、プログラムの別の部分の問題ではないと思います。構文エラーはerror C2059: syntax error : '=='error C2143: syntax error : missing ';' before '{'if セグメントと else セグメントの両方の中にあります...何かアイデアはありますか?

ありがとう

4

1 に答える 1

2

コードに明らかな構文エラーはありませんが、コンパイラは依然として構文エラーを出力として出力します。これは通常、プリプロセッサ関連の問題を示しています。ソース コード全体を投稿するのは明らかに問題なので、それらを見つける方法をいくつか示します。

まず#define、ファイルに定義されているマクロ、またはマクロであることがわかっている失敗した式のシンボルを確認します。

それでも問題の発見に役立たない場合、このページでは、Visual Studio のファイルへのプリプロセッサ出力を有効にして、ほとんどの場合問題の発見に役立つ出力を検査する方法について説明します。

于 2013-07-31T20:28:42.293 に答える