私はばかげた間違いをしました(セミコロンを忘れました、最近Pythonが多すぎます)が、gccから興味深いエラーメッセージが表示されました: "expected'、' or';' 'if'"の前。
これらのエラーメッセージが可能なソースコードの「上限」を提供することは知っていますが、「if」トークンが実際には「;」の後にではなく「、」の後に来るような構造がCにあるかどうかを知りたいです。
後は必ずしも直後ではありません。エラーメッセージは次のとおりです。'if'構文をヒットしました。この時点で、私は(前の)ステートメントの終わりか、リストの次の項目のどちらかを期待していました。それらの1つはこの「if」の前にある必要があるので、私はあなたに知らせています
「if」トークンが実際には「;」の後にではなく「、」の後に来るような構造がCにあるかどうかを知りたいのですが。
C BNF文法によれば、anif
は常にステートメントの先頭にあります。したがって、前に。を付けることはできません,
。
if
いいえ、ステートメントの前にコンマが表示される可能性はありません。したがって、これはgccのコンパイラのタイプミス/バグである必要があります。
gccパーサーはifステートメントの前にシーケンスポイントを探していると思います。セミコロンにはシーケンスポイントがありますが、式の中でtoコンマ演算子が使用されているシーケンスポイントもあります。したがって、ステートメントと式全体のエラーのエラー出力は、どういうわけか同じように見えます。