連載

C#入門

第19回 プリプロセッサとドキュメント

(株)ピーデー
川俣 晶
2002/01/11


自作のエラーや警告を発する

 込み入ったプログラムを記述していると、C#の文法エラーではないが、プログラムの意図として間違いだとプログラマに伝えたい場合がある。特に個人ではなくチームで開発していると、他のプログラマに間違った使い方をさせないために、このような措置が必要とされることがある。これを実現するために、C#のプリプロセッサには、警告を発する「#warning」と、エラーを発する「#error」が用意されている。以下はそれを用いた例である。

 1: using System;
 2:
 3: #if DEBUG
 4: #warning This is a sample warning.
 5: #endif
 6:
 7: #if DEBUG
 8: #error This is a sample error.
 9: #endif
10:
11: namespace ConsoleApplication9
12: {
13:   class Class1
14:   {
15:     static void Main(string[] args)
16:     {
17:     }
18:   }
19: }
エラーや警告を発するサンプル・プログラム9
コンパイル時にエラーや警告を発するために、「#warning」と「#error」が用意されている。

 これを実行すると以下のようになる。

 1: ------ ビルド開始 : プロジェクト : ConsoleApplication9, 構成 : Debug .NET ------
 2:
 3: リソースを準備しています...
 4: 参照を更新しています...
 5: メイン コンパイルを実行しています...
 6: f:\w\test3\consoleapplication9\class1.cs(4,10): warning CS1030: #warning : 'This is a sample warning.'
 7: f:\w\test3\consoleapplication9\class1.cs(8,8): error CS1029: #error : 'This is a sample error.'
 8:
 9: ビルドの完了 -- エラー 1、警告 1
10: サテライト アセンブリをビルドしています...
11:
12:
13:
14: ---------------------- 終了 ----------------------
15:
16:   ビルド : 0 正常終了、1 失敗、0 スキップ
サンプル・プログラム9のビルド結果
ソースコードでの指定に従い、警告が1件、エラーが1件出力されている。

 見てのとおり、警告が1件、エラーが1件出力されているが、この2つは、ソースコード上で明示的に指定されたものである。警告は4行目の#warningによって引き起こされたもので、エラーは8行目の#errorで引き起こされたものである。それぞれ、ソースコード上に記述された文字列がエラーメッセージ中に出力されていることが分かるだろう。

 これらの機能は、主に#ifと同時に使われることになるだろう。いつでもエラーになるソースは常識的には意味がないからだ。指定した条件が適切ではないことを警告、またはエラーとして報告するために使用されることが多いだろう。

IDEで折り畳む

 Visual Studio .NETでWindowsアプリケーションのプロジェクトを生成すると、ソースコードが生成される。その際、一部のソースコードが、折り畳まれて見えない状態になっていることにお気づきの方も多いと思う。このような、ある範囲のソースコードをワンクリックで見せたり隠したりする(折り畳む)機能が、IDEには存在するのである。通常は、クラスやメソッドなどの単位で折り畳むことができるのだが、上記の例のように、この範囲に該当しない単位で折り畳める場合もある。これは、#regionと#endregionというプリプロセッサの命令を使って実現できる。以下はそれを用いた例である。

 1: using System;
 2:
 3: namespace ConsoleApplication10
 4: {
 5:   class Class1
 6:   {
 7:     static void Main(string[] args)
 8:     {
 9:       #region sample output code
10:       Console.WriteLine("Output 1");
11:       Console.WriteLine("Output 2");
12:       Console.WriteLine("Output 3");
13:       Console.WriteLine("Output 4");
14:       Console.WriteLine("Output 5");
15:       #endregion
16:     }
17:   }
18: }
IDEの機能を利用するサンプル・プログラム10
「#region」〜「#endregion」で囲まれた範囲はIDEで折り畳むことができる。

 このソースをIDEで開いてみよう。

サンプル・プログラム10をIDEで開いた画面
「#region」の行の左側に「-」マークが付いているのが分かる。

 そして、9行目左側の「-」マークをクリックすると、#regionから#endregionまでの範囲が、以下のように折り畳まれるのである。

「-」マークをクリックしたときの画面
「#region」を使用した範囲が折り畳まれる。折り畳まれた部分には#regionの後に記述した文字列がグレー表示される。

 折り畳まれた段階では、#regionの後に記述した文字列がグレーで表示されていることに注目していただきたい。何が折り畳まれているのか、分かりやすく説明する文章を入れておくとよいだろう。

 この機能は、ツールが自動生成したソースなど、見る必要のないソースを簡単に隠すために便利である。


 INDEX
  第19回 プリプロセッサとドキュメント
    1.プリプロセッサとは何か
    2.ソースにシンボルの定義を埋め込む
    3.複雑な条件の指定
  4.自作のエラーや警告を発する
    5.XMLドキュメントの埋め込み
    6.利用できるさまざまな要素
 
「C#入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間