JPCERT コーディネーションセンター

安全・安心なIT社会のための、国内・国際連携を支援する

お問い合わせ サイトマップ English

Home > ラーニング > セキュアコーディング > C セキュアコーディングスタンダード > 02. 宣言と初期化 (DCL)

  1. HTTPS

02. 宣言と初期化 (DCL)

最終更新: 2010-07-26

DCL04-C. ひとつの宣言で2つ以上の変数を宣言しない

宣言をするときは、一行にひとつの変数だけを宣言し、その変数の役割について説明的なコメントをつけておくこと。ひとつの宣言で複数の変数を宣言すると、変数の型やその初期値について混乱を招く恐れがある。ひとつの宣言で2つ以上の変数を宣言する場合、型および変数の初期値が分かるように注意しなければならない。

違反コード

以下のコードでは、プログラマもしくはコードレビュアーは二つの変数 srccchar * として宣言されていると 誤解してしまうかもしれない。実際には、srcchar * 型をもつが、cchar 型をもつ。

char *src = 0, c = 0;
適合コード

以下の解決法では、各変数は別々の行で宣言されている。

char *src;    /* 元の文字列 */
char c;       /* テストする文字 */

このように変更してもコンパイルに影響はないが、プログラマの意図はより明解になる。

違反コード

以下のコードでは、プログラマやコードレビュアーは、ij も1に初期化されると誤解してしまうかもしれない。実際には、j のみ初期化され、i は初期化されないままである。

int i, j = 1;
適合コード

以下の解決法では、ij も1に初期化されていることが一目瞭然である。

int i = 1;
int j = 1;
例外

DCL04-01: たとえばループカウンタのような単純な宣言は for 文に含めることができる。

for (size_t i = 0; i < mx; ++i ) {
  /* ... */
}
リスク評価

ひとつの宣言で二つ以上の変数を宣言しないようにすれば、コードは読みやすくなるし混乱も排除できる。

レコメンデーション 深刻度 可能性 修正コスト 優先度 レベル
DCL04-C P3 L3
自動検出

LDRA tool suite V 7.6.0 はこのレコメンデーションの違反を検出することができる。

参考情報
  • [ISO/IEC 9899:1999] Section 6.7, "Declarations"
  • [ISO/IEC PDTR 24772] "BRS Leveraging human experience"
翻訳元

DCL04-C. Do not declare more than one variable per declaration

Top へ