CERT.EXPR.VOLATILE.ADDR
非 volatile ポインターを介して volatile オブジェクトにアクセスしないでください。
脆弱性とリスク
非 volatile lvalue による volatile 修飾された型の参照は、定義されていない動作です。
たとえば、コンパイラは一度テストされた変数が変化できないと判断すると、最適化中に重要なコードを削除する場合があります。
このチェッカーは、volatile オブジェクトのアドレスを非 volatile ポインター (*) に代入するコードを探します。
軽減と防止
volatile オブジェクトを指すポインターに "volatile" 修飾子を使用してください。
例
void func(void) { static int *ip1; static volatile int i_v = 0; ip1 = &i_v; if (*ipl != 0) { /* ip is defined as non-volative but it contains the lvalue of a volative int */ /* ...*/ } }
4 行目で違反が報告されます。