DCL04-C. ひとつの宣言で2つ以上の変数を宣言しない
宣言をするときは、一行にひとつの変数だけを宣言し、その変数の役割について説明的なコメントをつけておくこと。ひとつの宣言で複数の変数を宣言すると、変数の型やその初期値について混乱を招く恐れがある。ひとつの宣言で2つ以上の変数を宣言する場合、型および変数の初期値が分かるように注意しなければならない。
違反コード
以下のコードでは、プログラマもしくはコードレビュアーは二つの変数 src
と c
が char *
として宣言されていると 誤解してしまうかもしれない。実際には、src
は char *
型をもち、それに対して c
は char
型をもつ。
char *src = 0, c = 0;
適合コード
以下の適合コードでは、各変数は別々の行で宣言されている。
char *src; /* 元の文字列 */ char c; /* テストする文字 */
このように変更してもコンパイルに影響はないが、プログラマの意図はより明解になる。
違反コード
以下のコードでは、プログラマやコードレビュアーは、i
も j
も1に初期化されると誤解してしまうかもしれない。実際には、j
のみ初期化され、i
は初期化されないままである。
int i, j = 1;
適合コード
以下の適合コードでは、i
も j
も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 |
実装済み |
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)