このページは、練習問題の解答例や解説のページです。
次のプログラムの実行結果はどうなりますか?
#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
次のプログラムの実行結果はどうなりますか?
#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
次のプログラムの実行結果はどうなりますか?
#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つの文字をみつけてコンパイルエラーにしてしまいます。
次のプログラムの実行結果はどうなりますか?
#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 でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |