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

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-EX1: 次の関数例に示すように、同じ for 文で、複数のループ制御変数を宣言できる。

size_t bitcount(size_t n) {
    const size_t limit = sizeof n * CHAR_BIT;
    size_t count = 0;
    for (size_t i = 0, j = 1; i < limit; ++i, j <<= 1) {
        if (n & j)
            ++count;
    }
    return count;
}
リスク評価

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

レコメンデーション

深刻度

可能性

修正コスト

優先度

レベル

DCL04-C

P3

L3

自動検出

ツール

バージョン

チェッカー

説明

ECLAIR

1.1

declgrup_srceline

実装済み

LDRA tool suite

V. 8.5.4

177 S
579 S

実装済み

PRQA QA-C 8.1 2205 部分的に実装済み
関連するガイドライン
C++ Secure Coding Standard DCL04-CPP. Do not declare more than one variable per declaration
翻訳元

これは以下のページを翻訳したものです。

DCL04-C. Do not declare more than one variable per declaration (revision 79)

Top へ

Topへ
最新情報(RSSメーリングリストTwitter