Home > ラーニング > セキュアコーディング > CERT セキュアコーディングスタンダード > 01. プリプロセッサ (PRE)
標準ヘッダと同じ名前のファイルが、インクルードされるソースファイルのサーチパスにある場合、動作は未定義である。
以下の表に標準ヘッダを列挙する。
| <assert.h> | <complex.h> | <ctype.h> | <errno.h> | <fenv.h> |
| <float.h> | <inttypes.h> | <iso646.h> | <limits.h> | <locale.h> |
| <math.h> | <setjmp.h> | <signal.h> | <stdarg.h> | <stdbool.h> |
| <stddef.h> | <stdint.h> | <stdio.h> | <stdlib.h> | <string.h> |
| <tgmath.h> | <time.h> | <uchar.h> | <wchar.h> | <wctype.h> |
標準ヘッダファイル名、システム固有のヘッダファイル名、その他のヘッダファイル名を再利用しないこと。
以下のコード例では、プログラマは、標準ライブラリのローカル版を使おうとしているが違いを明確にしていない。
#include "stdio.h" /* 混乱を招く。<stdio.h> とは異なる */ /* ... */
以下の解決法ではローカルライブラリに一意の名前をつけることで問題に対処している(「PRE08-C. ヘッダファイル名が一意であることを保証する」にあるように)。こうすることで、使用しているライブラリがオリジナルのものではないことが明確になる。
/* ローカル版の stdio.h を使っている */ #include "mystdio.h" /* ... */
他のヘッダファイル名と衝突するヘッダファイル名を使用すると、間違ったファイルがインクルードされてしまう恐れがある。
| レコメンデーション | 深刻度 | 可能性 | 修正コスト | 優先度 | レベル |
|---|---|---|---|---|---|
| PRE04-C | 低 | 低 | 中 | P2 | L3 |
LDRA tool suite V 7.6.0 はこのレコメンデーションの違反を検出することができる。