C/C++ で空の式が合法なのはなぜですか?

他に assert(foo == bar); できる方法 NDEBUG の場合は何もコンパイルされません 定義されていますか?


これは、C および C++ が NOP を表現する方法です。


私は言語設計者ではありませんが、答えは「なぜですか?」です。言語設計の観点からは、規則 (つまり文法) をできるだけ単純にする必要があります。

「空の式」には用途があることは言うまでもありません。つまり、

for (i =0; i

デッドウェイトになります (良い使い方ではありませんが、それでも使用できます)。

編集:この回答へのコメントで指摘されているように、その塩に値するコンパイラはおそらくそうではありません このループでビジー待機し、最適化して取り除きます。ただし、 for ヘッド自体 (i++ 以外) にもっと便利なものがあった場合、データ構造のトラバーサルで (奇妙なことに) 行われるのを見たことがありますが、空の本体を持つループを引き続き構築できると思います (/ を使用して) "for" 構文を悪用しています)。