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)
