こんにちは、ナナです。
プログラミングをしている時に「このプログラムの一部を動かないようにしたい」、そんなシーンに出くわすことってありますよね。
そこで出てくるのが「コメントアウト」です。
コメントアウトは、プログラムの一部をコメント化して動かさないようにすることです。
本記事では次の疑問点を解消する内容となっています。
それでは、コメントアウトの仕方について学んでいきましょう。
C言語でコメントアウトする方法は2つ
C言語ではプログラムをコメントアウトする方法は次の2つです。
各コメントアウトの方法を、順に示しましょう。
コメント機能を使ったコメントアウト
C言語にはプログラムを捕捉するための「コメント機能」が搭載されています。
コメント機能 | 使用例 | 説明 |
---|---|---|
/* */ | /* コメント部分 */ | /* ~ */で括られた部分がコメントアウト。 複数行に跨いでコメントアウトすることもできる。 |
// | // コメント部分 | //の直後から行末までがコメントアウトされる。 複数行に跨ぐことはできない。 |
プログラムでは次のようにコメントアウトを行います。
#include <stdio.h>
int main(void)
{
/* printf("Hello"); */
/*
printf("Hello");
printf("World");
*/
// printf("World");
return 0;
}
このようにプログラムをコメントアウトすることで、プログラムの一部を無効化することができます。
コメント機能を使った「コメントアウト」は、感覚的に理解しやすく皆さんも普段からしていますよね。
//を使ったコメントアウトは非常に便利なので、私もよく利用します。
条件コンパイル(#if)を使ったコメントアウト
続いて少し便利なコメントアウト方法を紹介しましょう。
C言語には「条件コンパイル」と呼ばれるソースコードをコンパイルする前に事前編集する機能が備わっています。
条件コンパイルにはいくつか書式がありますが、「#if 0 ~ #endif」を利用することでプログラムをコメントアウトすることができます。
#include <stdio.h>
int main(void)
{
#if 0
printf("Hello");
printf("World");
#endif
return 0;
}
条件コンパイルを使ったコメントアウトはC言語経験者ほど活用するテクニックです。これは単純にコメントアウトするだけではないためです。
条件コンパイルを使ったコメントアウトに、どのようなメリットがあるかを解説していきましょう!
条件コンパイルをコメントアウトで使う2つの理由
条件コンパイルを使う2つの理由を解説しましょう。
理由その①:複数行のコメントアウトをサポート
複数行をコメントアウトする方法として /**/ を使う方法があります。
しかし、この方法はネスト構造に対応していないため、次のようにコメントアウトの中にコメントアウトがあると使えません。
#include <stdio.h>
int main(void)
{
/*
printf("Hello"); /* コメント */
printf("World");
*/
return 0;
}
しかし、条件コンパイルではネスト構造のコメントアウトもサポートしています。
#include <stdio.h>
int main(void)
{
#if 0
printf("Hello");
#if 0
printf("\n");
#endif
printf("World");
#endif
return 0;
}
何十行ものプログラムをコメントアウトしたい時は、条件コンパイルを利用すると何も気にすることなく一括で可能です。
理由その②:コメントアウトの切り替え
「コメントアウト」の目的とは、プログラムを動かさないようにするためです。
しかしですよ、動かさないようにするのであれば、いっそのこと消してしまえばよいですよね。なぜ「コメントアウト」という形式を使うのでしょうか?
それは
新しいプログラムを試したい
というシーンがあるからです。
プログラミングとは1度作って終わりというわけではなく、時間とともに変化していくものです。
「以前のプログラムを残しつつ、新しいプログラムに差し替えてみたい」このようなシーンでよくコメントアウトは利用されます。
こんな時に条件コンパイルのコメントアウトは非常に都合の良い機能なのです。
次のように機能①と機能②を差し替えたいといったシーンがあったとします。条件コンパイルを使った切り替え方法を示します。
機能①を選択
#include <stdio.h>
int main(void)
{
#if 1
printf("Hello"); // 機能①
#else
printf("World"); // 機能②
#endif
return 0;
}
Hello
機能②を選択
#include <stdio.h>
int main(void)
{
#if 0
printf("Hello"); // 機能①
#else
printf("World"); // 機能②
#endif
return 0;
}
World
このように条件コンパイルを利用すると、「#if 0」と「#if 1」の数字を変えるだけで機能を切り替えることができます。
この例では1行だけですが、実際の開発では何十行の処理を切り替えたりすることも普通なので、条件コンパイルならすごく便利ですね。
コメントアウトのまとめ
- 1行のコメントアウトは「//コメント」の形式が便利
- 複数行のコメントアウトは「#if 0」を利用すると何も気にすることなく実施できる
- プログラムを切り替えたい時は「#if 0 ~ #else ~ #endif」を使うと簡単
条件コンパイルについて詳しく知りたい方は『ifdef 【プログラムをカットする技術と使い方を紹介】』を参照してください。