11

CI では次のことができます。

int main()
{
 printf("HELLO WORLD");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}

そしてそれは動作します!何故ですか?

私の個人的な考え: セミコロンは NO OPERATION (ウィキペディアから) インジケータであり、それらの巨大な文字列を持つことは、ステートメントが終了したことを C に伝えることと同じ考えを提供します。

4

5 に答える 5

11

セミコロンはステートメントを終了します...連続したセミコロンは、操作のないステートメントを表します(あなたが言うように)。検討:

while (x[i++] = y[j++])
    ;

ここでは、すべての作業がループ テスト条件で行われるため、空のステートメントが望ましいです。ただし、制御ループがない場合でも、空のステートメントは許可されます。

なんで?

まあ、プリプロセッサの多くの使用法は、いくつかの以前の定義に基づいて、実際の C コードに拡張されるか、削除される可能性がありますが、与えられた...

 MY_MACRO1();
 MY_MACRO2();

MY_MACROX()...プリプロセッサは、おそらく空のステートメントの後に、末尾のセミコロンを残して、テキストを置き換えることしかできません。コンパイラがこれを拒否した場合、プリプロセッサを使用するのがはるかに難しくなるか、プリプロセッサ呼び出しがプリプロセッサ以外の関数呼び出しとは異なります (置換内でセミコロンを出力する必要があり、呼び出し元は末尾のセミコロンを避ける必要があります)。それらを使用する場合) - これにより、パフォーマンス、デバッグ、およびカスタマイズの目的で、実装が巧妙なマクロを関数に置き換えるのが難しくなります。

于 2012-06-04T05:52:13.570 に答える
9

C では null ステートメントを使用できます。これらは、空のループなどに役立ちます。

while (*d++ = *s++)
   ; // null statement.

一連のそれらを作成しました。

また、次のような null でないステートメントも使用できます。

0;
1+1;

どちらにも式が含まれていますが、副作用がないため、実際には何もしません。コンパイラはそれらについて警告するかもしれませんが、それらは許可されています。

まともなコンパイラは、通常、上記のコードを生成しません (最適化をオフにしてもほとんどのコードは生成されず、最適化がオンになっているコードは想像できません)。

于 2012-06-04T05:49:20.373 に答える
8

2 つのセミコロンを一緒に使用すると、空のステートメントになります。C は、空のステートメントを使用しても問題ありません。コードは生成されません。

于 2012-06-04T05:47:30.257 に答える
3

セミコロンはCのステートメントの終わりを識別し、あなたの場合、より多くのセミコロンがより多くの空のステートメントを識別するため...何も問題はありません。それらは単なる空のステートメントです。

于 2012-06-04T05:48:44.020 に答える
0

セミコロンは行末記号です。つまり、コードが行末に達したことを示し、次のコード行を実行します。

1 つの証拠は、ディレクティブを除いて、コードを 1 行で記述できることです。

main() { cout << "ENTER TWO NUMBERS"; cin >> a; cin >> b; cout << "The sum of two numbers are" << a+b; << return 0;}

main() { cout << "ENTER TWO NUMBERS"[THEN] cin >> a[THEN] cin >> b[THEN] cout << "2 つの数値の合計は" << a+b[THEN ] << リターン 0[THEN]}

したがって、複数のセミコロンを配置する場合は、THEN、THEN、THEN、THEN のようになり、あなたの個人的な考えは確かに正しいです。

于 2012-06-04T05:55:47.023 に答える