2

これは重複した質問のように見えるかもしれませんが、他の質問が私の質問に完全に答えないため、実際にはまったく異なります.私の質問は、なぜC ++コンパイラは次の行にテキストを出力しないのですか?次の行までの2つのテキストの間。次のように書いた場合のように:

 #include<iostream>
    using namespace std;
    main()
    {
      cout<<"hi
i am the king";//i have not included spaces after "hi"
}

エラーが表示されます:終端文字がありません。次の行の引用符にテキストを含める必要があることはわかっていますが、newline.

このようにスペースを含めて同じことを書くと:

#include<iostream>
        using namespace std;
        main()
        {
          cout<<"hi
    i am the king";//i have included spaces after "hi" up to the next line
    }

しかし、エラーは表示されません。なぜコンパイラはスペースを空白と見なし、最初のコードの改行ではありません.

4

2 に答える 2

1

これは、言語仕様によると、C++ コンパイラがどのように機能するかによるものです。スペース文字と改行文字は、どちらも空白文字ですが、コンパイラによって異なる方法で処理されます。

コンパイラの動作は、「翻訳のフェーズ」セクションの言語仕様で説明されています。コンパイラは、各行を個別に処理する必要があります。\線の最後にを使用して、複数の線を 1 つにステッチするように要求できます。コンパイラーは、明示的に要求しない限り、行を自動的にステッチしません。

「「こんにちは」の後に次の行までスペースを含めました」という意味が明確ではありません。含まれているのがスペースだけの場合、「次の行」はありません。新しい行を開始するには、改行文字を含める必要があります。

于 2013-06-24T17:31:00.400 に答える
0

優れた C++ プログラミングの習慣として、私は 1 行のコードを 100 文字以上に増やすことはありません。それは適切なインデントです。したがって、大きなコード行を書くことに関心がある場合は、次のアプローチを使用してコードを小さな行に分割する必要があります。

#include<iostream>
using namespace std;
main()
{
      cout<<"hi                     \
      i am the king";//i have included spaces after "hi" up to the next line
}

今あなたの問題に来て、

1) すべての C++ コンパイラは ; を期待します。終了文字の後に。あなたは改行文字を与えていますが、与えていません; コンパイルエラーが発生します。

2)あなたが言ったように、最後の文字まで空白がたくさんあると、そのエラーは発生しません。

スタック オーバーフローに関する素晴らしい議論の 1 つを次に示します。

コードで行の長さをまだ制限していますか?

これは、すべての行が x と言う時点で終了していることを示します (この値は、使用するコンパイラによって異なります)。行の終わりまでコードを書くと、コンパイラは改行文字を見つけられないため、2番目のポイントではエラーは見つかりません。

于 2013-06-24T06:30:01.013 に答える