289さんありがとう。
無駄は生じないというのは、1回しか実行されない
ではなく、
case WM_CREATE: が実行されるたびに HDC hDC; とかも
実行されるけど、HDC hDC; は「宣言」するだけだから
何度実行されても処理が重くなることはない
ということですか?
どっちの理由で無駄がないんですか?


最適化で消えて無くなる
とは、BBC32 でのコンパイル時に、

 case WM_CREATE:
  HDC hDC;
  PAINTSTRUCT ps;
  char *str = "abc";
 break;

を

char *str = "abc";
 case WM_CREATE:
  HDC hDC;
  PAINTSTRUCT ps;

 break;

してくれるってこと?
str は TextOut(hDC,0,0,str,3); でした。
書き間違えてました。