他に assert(foo == bar);
できる方法 NDEBUG
の場合は何もコンパイルされません 定義されていますか?
これは、C および C++ が NOP を表現する方法です。
私は言語設計者ではありませんが、答えは「なぜですか?」です。言語設計の観点からは、規則 (つまり文法) をできるだけ単純にする必要があります。
「空の式」には用途があることは言うまでもありません。つまり、
for (i =0; i
デッドウェイトになります (良い使い方ではありませんが、それでも使用できます)。
編集:この回答へのコメントで指摘されているように、その塩に値するコンパイラはおそらくそうではありません このループでビジー待機し、最適化して取り除きます。ただし、 for ヘッド自体 (i++ 以外) にもっと便利なものがあった場合、データ構造のトラバーサルで (奇妙なことに) 行われるのを見たことがありますが、空の本体を持つループを引き続き構築できると思います (/ を使用して) "for" 構文を悪用しています)。