Home > ラーニング > セキュアコーディング > C セキュアコーディングスタンダード > 02. 宣言と初期化 (DCL)
宣言をするときは、一行にひとつの変数だけを宣言し、その変数の役割について説明的なコメントをつけておくこと。ひとつの宣言で複数の変数を宣言すると、変数の型やその初期値について混乱を招く恐れがある。ひとつの宣言で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-01: たとえばループカウンタのような単純な宣言は for 文に含めることができる。
for (size_t i = 0; i < mx; ++i ) {
/* ... */
}
ひとつの宣言で二つ以上の変数を宣言しないようにすれば、コードは読みやすくなるし混乱も排除できる。
| レコメンデーション | 深刻度 | 可能性 | 修正コスト | 優先度 | レベル |
|---|---|---|---|---|---|
| DCL04-C | 低 | 低 | 低 | P3 | L3 |
LDRA tool suite V 7.6.0 はこのレコメンデーションの違反を検出することができる。
DCL04-C. Do not declare more than one variable per declaration