ポインタの操作において、
普通の(配列でない)変数は1要素の配列として扱います。 (
N1570 6.5.6 Additive operatorsの7)
c++;により、cはbの「1つ次」の要素を指すようになります。
これは範囲外であり、「1つ次」の要素を指すポインタを生むことはOKですが、
それを単項*演算子でデリファレンスしてはいけないと定められています。 (N1570 6.5.6の8)
タカさんのプログラムはこれに違反しており、未定義動作となります。 (N1570 4. Conformanceの2)
未定義動作なので、何が起こってもおかしくなく、bcc32ではなくタカさんのプログラムのバグです。
printf( "a:%d\n",&a );をコメントアウトした場合、
aは最初に1を代入する以外に値を書き換えることもポインタを使うこともなく、
定数として扱うことができると考えられるので、
実際に最適化によりaが定数に置き換わり、範囲外への書き込みによるデータの破壊を免れた可能性が考えられます。
ちなみに、printfで%dに対応するデータとしてポインタを渡すのも、
型の不一致で未定義動作になります。 (N1570 7.21.6.1 The fprintf functionの9)
ポインタを出力するには、void*にキャストして書式%pを使うのがいいでしょう。