ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
C++のコメントアウト
C++では「//」を書くとその行の末尾までが、「/*」と「*/」で囲んだ範囲がコメントとして扱われ、コンパイル時に無視される。コードを消さずに一時的に無効化する「コメントアウト」もこの2つで行う。
| この記事の要点 |
|---|
|
コメントとは
コメントとは、ソースコード中に書く「プログラムとしては実行されない説明文・メモ」のことである。コンパイラはコメント部分を読み飛ばすため、何を書いてもプログラムの動作には影響しない。日本語でもよい。
主な用途は次の2つである。
- 説明を残す… 処理の意図や注意点を人間向けに書いておく。
- コードを一時的に無効化する… 動くコードをコメントにして実行されないようにする。これを特にコメントアウトと呼ぶ。
C++には書き方が2種類ある。「//」で始める行コメントと、「/*」「*/」で囲むブロックコメントである。順に見ていく。
「//」行コメント(単一行コメント)
「//」を書くと、そこからその行の終わり(改行)までがコメントになる。1行単位のメモや、コードの右側に補足を書くのに向く。C++では最もよく使われる形式である。
|
#include <iostream>
int main() { // これは行コメント(この行は無視される) std::cout << "Hello"; // 行末に補足を書ける return 0; } |
「//」より前にあるコード(上の例の std::cout << "Hello";)はそのまま実行され、「//」より後ろだけがコメントになる点に注意する。
「/* */」ブロックコメント(複数行コメント)
「/*」から「*/」までがコメントになる。改行をまたいでもよいため、複数行をまとめて無効化したり、長めの説明を書いたりするのに向く。
|
int main() { /* ここから 複数行にわたって コメントにできる ここまで */ int a = 1; /* 行の途中だけ */ int b = 2; return 0; } |
「/* */」は行の途中にも置けるので、上の例の int a = 1; /* … */ int b = 2; のように、式の一部分だけを囲んで無効化することもできる。
「//」と「/* */」の使い分け
| 書き方 | 範囲 | 向いている用途 |
| // 行コメント | 「//」からその行末まで | 1行のメモ、行末への補足、1行だけの無効化 |
| /* */ ブロックコメント | 「/*」から最初の「*/」まで(複数行可) | 数行〜十数行のまとめた無効化、長い説明、行の途中の一部分 |
迷ったら、1行や行末は「//」、複数行まとめてなら「/* */」と覚えておけばよい。実務では行コメント「//」が主役で、ブロックコメントは範囲を広く囲みたいときに使う、という配分が一般的である。
デバッグでの一時無効化(コメントアウト)
プログラムが思った通りに動かないとき、一部の処理を消さずに実行だけ止めて、原因を切り分けたいことがある。このときコードをコメントにして無効化するのがコメントアウトである。あとで「//」や「/* */」を外せば、すぐ元のコードに戻せる。
|
int main() { int x = 10; // x = 20; // この行だけ実行されない(一時的に無効化) std::cout << x; // 10 が出力される return 0; } |
1行なら「//」を行頭に付ける、複数行なら「/* */」で囲む、というのが基本の手順になる。
「/* */」はネスト(入れ子)できない
C++のブロックコメントは入れ子にできない。「/*」で始まったコメントは、最初に現れた「*/」で終わってしまうからである。すでに「/* */」が含まれている範囲を、さらに大きな「/* */」で囲もうとすると意図通りにならない。
|
/* ← 外側のコメント開始 /* 内側 */ ← ここの「*/」でコメントが終わってしまう int y = 0; // ← ここはコメントの外(実行される) */ ← 余った「*/」はコンパイルエラーになる |
このように、最初の「*/」でコメントが閉じてしまい、残りの「*/」が宙に浮いてコンパイルエラーになる。「/* */」が含まれる範囲をまとめて無効化したいときは、次に説明する「#if 0 ~ #endif」を使うのが安全である。
「#if 0 ~ #endif」で大きな範囲を無効化する
プリプロセッサの条件指定「#if 0」と「#endif」で囲むと、その範囲のコードはコンパイル対象から外れる。条件が「0(偽)」なので中身は常に無効化される、という仕組みである。
|
int main() { #if 0 /* この中の /* */ ごと、まとめて無効化できる */ int a = 1; int b = 2; #endif return 0; } |
「#if 0 ~ #endif」は「/* */」と違って入れ子にできるうえ、中に「/* */」が含まれていても問題なく無効化できる。あとで 0 を 1 に変えれば、囲った範囲をまとめて有効化できるのも利点である。広い範囲を一時的に切り離したいときに向く。
ドキュメントコメント(Doxygen など)
関数やクラスの説明から自動でドキュメントを生成するツール(Doxygen など)では、専用の書き方をしたドキュメントコメントを読み取る。文法上は通常のコメントなので、これらのツールを使わなくてもコンパイルには影響しない。
- /// … 行コメント形式のドキュメントコメント。
- /** … */ … ブロックコメント形式のドキュメントコメント。
|
/// 2つの整数を足して返す /// @param a 1つ目の値 /// @param b 2つ目の値 int add(int a, int b) { return a + b; }
/** * 2つの整数を掛けて返す * @param a 1つ目の値 * @param b 2つ目の値 */ int mul(int a, int b) { return a * b; } |
はじめのうちは「こういう書き方のコメントがある」程度に知っておけば十分である。チーム開発でドキュメント生成を使う段階になったら、Doxygen の記法を改めて確認するとよい。
コメントアウトの落とし穴
| 注意したいポイント |
|---|
|
|
// 行末のバックスラッシュで次の行までコメントになる例 \ int z = 100; // ← この行もコメント扱いになってしまう(実行されない)
int w = 200; // ここからは通常どおり実行される |
よくある質問(FAQ)
Q. 「//」と「/* */」はどちらを使えばよいですか?
A. 1行のメモや行末の補足は「//」、複数行をまとめて消したいときは「/* */」が基本です。C++では「//」のほうが広く使われます。
Q. 「/* */」の中にもう一つ「/* */」を書けますか?
A. 書けません。C++のブロックコメントは入れ子(ネスト)にできず、最初に現れた「*/」でコメントが終わります。内側に「/* */」がある範囲をまとめて無効化したいときは「#if 0 ~ #endif」を使ってください。
Q. コメントに日本語を書いても大丈夫ですか?
A. コメントはコンパイラに無視されるので、日本語で説明を書いても動作には影響しません。ソースコードの文字コードは UTF-8 など環境に合わせておくと安全です。
Q. コメントアウトしたコードはプログラムに残りますか?
A. ソースファイル上には文字として残りますが、コンパイル時に無視されるため実行ファイルには影響しません。不要になったコードは、最終的には削除して整理するのが望ましいです。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?