先頭へ戻る

コメント 解答ページ | Programming Place Plus 新C++編

Programming Place Plus トップページ -- 新C++編 -- コメント

先頭へ戻る

このページの概要

このページは、練習問題の解答例や解説のページです。



解答・解説

問題1 (確認★)

次のプログラムの実行結果はどうなりますか?

#include <iostream>

int main()
{
    int x {100};
//  int x {200};

    std::cout << x << "\n";
}


// がある行はコメントですから(本編解説)、コンパイル時に無視されます。実質、次のように書かれているのと同じことです。

#include <iostream>

int main()
{
    int x {100};


    std::cout << x << "\n";
}

したがって、実行結果は次のようになります。

実行結果:

100

問題2 (確認★)

次のプログラムの実行結果はどうなりますか?

#include <iostream>

int main()
{
    std::cout << "message1\n";
    /*
    std::cout << "message2\n";
    std::cout << "message3\n";
    std::cout << "message4\n";
    */
    std::cout << "message5\n";
}


/**/ で囲まれた範囲がコメントですから(本編解説)、コンパイル時に無視されます。実質、次のように書かれているのと同じことです。

#include <iostream>

int main()
{
    std::cout << "message1\n";
     
    std::cout << "message5\n";
}

したがって、実行結果は次のようになります。

実行結果:

message1
message5

問題3 (確認★)

次のプログラムの実行結果はどうなりますか?

#include <iostream>

int main()
{
    std::cout << "message1\n";
    /*
    std::cout << "message2\n";
    /*
    std::cout << "message3\n";
    */
    std::cout << "message4\n";
    */
    std::cout << "message5\n";
}


/**/ によるコメントは入れ子にすると、意図どおりに機能しません(本編解説)。分かりやすく色分けしてみると、次のようになります。

#include <iostream>

int main()
{
    std::cout << "message1\n";
    /*
    std::cout << "message2\n";
    /*
    std::cout << "message3\n";
    */
    std::cout << "message4\n";
    */
    std::cout << "message5\n";
}

最初の /* は最初の */ とペアを作ります。その範囲内にも /* が含まれていますが、これはコメント内のただの2文字としてあつかわれます。

そのため、最後の */ はペアが作られておらず、コンパイラは意味不明な2つの文字をみつけてコンパイルエラーにしてしまいます。

問題4 (確認★★)

次のプログラムの実行結果はどうなりますか?

#include <iostream>

int main()
{
    std::cout << "message1\n"
//            << "message2\n"
              << "//message3\n"
              << "/*message4\n"
              << "message5*/\n"
              << "message6\n"
              ;
}


C++ では、単語の途中などの一部の例外を除いて、任意の位置で改行できますから、この例のように1行分の出力を、ソースコード上でも1行ずつに分けて記述できます。こういう書き方をすると、// で1行だけ消すことが簡単にできます。message2 のところは // によって消されています。

"//message3\n" は、文字列リテラルの内部に // があります。この場合はコメントを開始する記号ではなく、文字列リテラルを構成する文字として扱われますから、これはコメントではありません(本編解説)。

"/*message4\n""message5*/\n" も同様です。/**/ はコメントではなく、文字列リテラル内の文字です。

したがって、実行結果は次のようになります。

実行結果:

message1
//message3
/*message4
message5*/
message6

参考リンク



更新履歴




はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー