工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#プリプロセッサディレクティブ完全ガイド:条件付きコンパイルと診断制御

C#プリプロセッサディレクティブをマスターする

C#プリプロセッサディレクティブがコンパイル制御、条件分岐、エラー処理をどう形作るかを解説。各ディレクティブの構文、実例、ベストプラクティスを網羅します。

プリプロセッサディレクティブは、実際のコンパイルが始まる前にコンパイラが評価する命令です。どのコードセクションを含めるか、警告やエラーをどう扱うか、さらにはコンパイラの行番号やファイル名認識を変更することさえ可能です。

C#では、ディレクティブは # 記号で始まり、1行で完結し、セミコロンではなく改行で終端されます。

C#のプリプロセッサディレクティブ
ディレクティブ説明構文
#ifプリプロセッサ式を評価し、真の場合のみコードを含める
#if expression
code
#endif
#elif#if に続いて追加の式をテスト
#if expr1
code1
#elif expr2
code2
#endif
#else先行する #if / #elif がすべて偽のときに実行
#if expr1
code1
#else
code2
#endif
#endif条件ブロックの終了
#if expr
code
#endif
#define新しいシンボルを定義
#define SYMBOL
#undef定義済みシンボルを削除
#undef SYMBOL
#warningレベル1のコンパイラ警告を生成
#warning Your warning message
#errorコンパイル時エラーを発生させる
#error Your error message
#line診断用の行番号とファイル名を上書き
#line 50 "FakeProgram.cs"
#endif
#regionエディタで折りたたみ可能な領域を作成
#region Description
code
#endregion
#pragmaコンパイラへ特別な指示(警告の有効/無効など)
#pragma warning disable
#endif

シンボルの定義と未定義

実例: シンボルの定義

#define TESTING

実例: シンボルの未定義

#undef TESTING

#if, #elif, #else, #endif による条件付きコンパイル

実践例

#define CSHARP
#undef PYTHON

using System;

namespace Directive {
    class ConditionalDirective {
        static void Main(string[] args) {
            #if (CSHARP && PYTHON)
                Console.WriteLine("CSHARP and PYTHON are defined");
            #elif (CSHARP && !PYTHON)
                Console.WriteLine("CSHARP is defined, PYTHON is undefined");
            #elif (!CSHARP && PYTHON)
                Console.WriteLine("PYTHON is defined, CSHARP is undefined");
            #else
                Console.WriteLine("CSHARP and PYTHON are undefined");
            #endif
        }
    }
}

出力: CSHARP is defined, PYTHON is undefined


警告とエラーの生成

警告の例

using System;

namespace Directives {
    class WarningDirective {
        public static void Main(string[] args) {
            #if (!CSHARP)
                #warning CSHARP is undefined
            #endif
            Console.WriteLine("#warning directive example");
        }
    }
}

警告行が出力されますが、コンソールテキストも表示されます。

エラーの例

using System;

namespace Directive {
    class Error {
        public static void Main(string[] args) {
            #if (!CSHARP)
                #error CSHARP is undefined
            #endif
            Console.WriteLine("#error directive example");
        }
    }
}

出力: ビルドがコンパイル時エラーで失敗し、最後のコンソール行は実行されません。


#line で診断位置をカスタマイズ

実例

using System;

namespace Directive {
    class LineDemo {
        public static void Main(string[] args) {
            #line 200 "AnotherProgram.cs"
            #warning Actual warning generated by Program.cs on line 10
        }
    }
}

結果: 警告が AnotherProgram.cs(200,22): warning CS1030: ... として表示されます。


#region と #endregion でコードを整理

実例

using System;

namespace Directive {
    class RegionDemo {
        public static void Main(string[] args) {
            #region Hello
                Console.WriteLine("Hello");
                Console.WriteLine("Hello");
                Console.WriteLine("Hello");
                Console.WriteLine("Hello");
                Console.WriteLine("Hello");
            #endregion
        }
    }
}

出力: "Hello" が5行表示されます。


#pragma で高度なコンパイラ制御

実例

using System;

namespace Directive {
    class PragmaDemo {
        public static void Main(string[] args) {
            #pragma warning disable
            #warning This is a warning 1
            #pragma warning restore
            #warning This is a warning 2
        }
    }
}

2つ目の警告のみ表示されます。

詳細は公式 #pragma (C# リファレンス) を参照してください。

C言語

  1. 3Dプリンティング vs CNC加工:プロジェクトに適したツール選び
  2. CNC加工におけるSFMとは? 表面速度の意味と計算方法
  3. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  4. C++変数・リテラル・定数完全ガイド:基礎から実践まで
  5. C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
  6. C言語キーワードと識別子:実践ガイド
  7. C言語データ型完全解説:int、float、charなど
  8. C言語プリプロセッサ(CPP)の理解:コンパイルをシンプルにする仕組み
  9. Python キーワードと識別子: 予約語と命名規則をマスター
  10. Python正規表現(reモジュール)実践ガイド
  11. Pythonのtimeモジュールをマスター:関数、構造体、実践例