/* */ (block comment) の解説と実装リファレンス

記事内には広告が含まれています。

/* */ (block comment) の解説と実装リファレンス

【概要】

/* ... */ は、Arduinoプログラミング(C/C++)において用いられる「ブロックコメント」構文です。コンパイラに対して、/* から */ の間に記述されたすべての文字を解析から除外するよう指示します。これは、コードの可読性を高めるためのドキュメント記述、または特定のコードブロックを一時的に無効化(コメントアウト)するために使用されます。

【仕様】

ブロックコメントは関数ではないため、通常の関数のような引数、戻り値、データ型の概念を持ちません。

  • 引数: なし
  • 戻り値: なし
  • データ型: なし(コンパイラ指示)
  • 初期状態: 解析対象外として処理
  • 処理タイミング: コンパイル時(プリプロセッサおよびコンパイラの解析段階で除去されるため、実行時のリソースには影響を与えない)

【技術的特徴】

  1. 複数行への対応: //(単一行コメント)とは異なり、改行を含めた広範囲のコードを一つのコメントとして定義できます。
  2. コンパイル時処理: コメント内の内容はバイナリに組み込まれません。そのため、コメントの長大化が実行時のメモリ(SRAM/Flash)を消費することはありません。
  3. 標準C/C++準拠: Arduino IDEのベースであるAVR-GCCなどのコンパイラにおいて、標準的なC言語の仕様に従います。

他のコメント構文との比較

| 特徴 | // (Single-line) | /* */ (Block) | #if 0 ... #endif |
| 範囲 | 改行まで | */ まで | 指定区間すべて |
| 主な用途 | 短い説明、変数定義の横 | 長い説明、コードブロックの無効化 | 複雑な条件によるコードの除外 |
| ネスト | 該当なし | 不可(後述) | 可能 |

【注意点】

  1. コメントのネスト不可:
    標準的なC言語仕様において、ブロックコメントの中に別のブロックコメントを入れる(ネストする)ことはできません。
    cpp
    /* 外側のコメント
    /* 内側のコメント */ <-- ここで外側のコメントも終了したとみなされる
    この部分はコンパイルエラーの原因となる可能性が高い。
    */

    複雑な構造を無効化する場合は、#if 0 … #endif を使用するのが安全です。
  2. プリプロセッサとの干渉:
    コメント内に #define 等のプリプロセッサ命令が含まれている場合、それらは完全に無視されます。意図しないマクロ定義の無効化に注意してください。
  3. 可読性の維持:
    あまりにも長いブロックコメントは、コードの保守性を低下させます。技術ドキュメンテーションとしては、適切な見出しと簡潔な説明を心がける必要があります。

【サンプルコード】

/* 
 * センサーデータの取得とフィルタリング処理 
 * 著者: 組み込みエンジニア 
 * 更新日: 2023-10-27 
 * 機能: 10Hzのサンプリングを行い、移動平均フィルタを適用する 
 */

void setup() {
  Serial.begin(9600);
}

void loop() {
  /* 
   * 以下の処理はデバッグ時のみ実行 
   * 現時点では無効化している 
   * 
   * int rawValue = analogRead(A0);
   * Serial.print("Raw Value: ");
   * Serial.println(rawValue);
   */

  delay(1000);
}

【活用例】

  1. ヘッダー情報の記述: ライブラリや複雑なアルゴリズムの冒頭に、パラメータの説明、制約事項、著作権情報を記述する。
  2. コードブロックのデバッグ無効化: 複雑な条件分岐やループを含む処理を、一時的に実行から除外する際に使用する。
  3. プロトコル定義のドキュメント化: 通信プロトコルのビットフィールド定義などをコメントとして記述し、実装コードと対比させる。

コメント

タイトルとURLをコピーしました