C# のコードで #region
や #endregion
の記載を見かけることがあります。
Unity 開発においては、デバッグ時に実行したいコードを #if DEBUG
~ #endif
で囲んだりします。
このような#
から始まるシンボルはプリプロセッサディレクティブと呼ばれ、上記だけではなく他にも数多くの種類が存在します。本記事ではC#のコーディング時に使えるディレクティブをいくつか紹介します。
目次
#region ディレクティブ:範囲を定義
#region
は #endregion
で囲むことで範囲を定義できます。
この2つはお互いの存在を確認するだけでその他は何もしません。2つが揃っていないとコンパイルエラーが発生します。
以下のように#region
から#endregion
で囲まれたコードは VSCode 上などで折りたたむことが可能です。
#warning ディレクティブ:警告を出す
#warning
ディレクティブを使うことで強制的にコンパイラの警告を出せます。
記載方法は#warning
のあとに警告に出したいメッセージを記載するだけです。
Unity のコンソールを確認すると、警告が表示されるようになりました。
#error ディレクティブ:エラーを出す
#error
ディレクティブを使うことで強制的にコンパイルエラーを発生させます。
記載方法は#error
のあとにエラー文を記載するだけです。
Unity のコンソールを確認すると、コンパイルエラーが発生しました。
#line ディレクティブ:警告やエラーの行番号を指定
#line
ディレクティブを使うと、コンパイル時に出力されるエラーや警告メッセージに行番号やファイル名を指定できます。
#line 行番号
使い方は#line [行番号] [ファイル名]
です。
例えば以下のように SampleClass 内に #line 20 "TestClass.cs"
と記載します。
public class SampleClass
{
public static void Main()
{
#line 20 "TestClass.cs"
int a;
}
}
コンパイル結果を確認すると、本来 SampleClass 内で起こる警告が TestClass.cs の 20 行目への警告として表示されました。
#line default
#line default
は、指定した行の番号を既定の番号に戻します。
例えば以下の場合、#line default
記載以降の行番号は規定の行番号に戻ります。
public class SampleClass
{
public static void Main()
{
#line 20 "TestClass.cs"
int a;
int b;
#line default
int c;
}
}
コンパイル結果は以下の通りです。2つ目までの int a;
とint b;
への警告は、行番号が 20, 21行目と指定した行からの番号となっていますが、3つ目の int c;
への警告は、規定の行番号である 9行目に戻っているのが分かります。
#pragma ディレクティブ:特別な命令をコンパイラに指示
#pragma ディレクティブを使うことでコンパイルに関する特別な命令をコンパイラに指示します。
#pragma
には、特定の警告を有効または無効にする#pragma warning
と、 ASP.NET ページのデバッグに使用するソースファイルのチェックサムを生成する#pragma checksum
が存在します。
#pragma warning
#pragma warning disable [警告番号]
で指定した番号の警告を無効にします。
#pragma warning restore [警告番号]
で指定した番号の警告を有効にします。
参考資料
- C# プリプロセッサ ディレクティブ | Microsoft DOCS
- プリプロセス | ++C++ // 未確認飛行 C