とかかなければならず、LPSTR p; // ... if ( p == NULL)
と書いてはならない。LPSTR p; // ... if (!p)
if (!p)は
if (p != 0)と全く等価であり、さらに、ポインタ型が 0 と比較されるときは、0 を NULL ポインタとして扱います。例え、NULL ポインタのビットパターンが全て 0 でなくとも、コンパイラは 0 を NULL ポインタとして解釈し、
if (!p)
は正しく動作します。正しく動作しないコンパイラは
ANSI C 非準拠なので、相手にしないことにしましょう。
問題なのはコードの可読性であり、文法的には全く問題がありません。