gcc はもともと海外で開発されていたものでので、マルチバイト環境が考慮されていませんでした。したがって、ソースコード中に、例えば "表" などという文字列があると、エラーになってコンパイルできませんでした。「表」は ShiftJis では 0x955c なので "表" という文字列は、"\x95\" と同じ意味になります。これをマルチバイトを考慮していない環境で考えると、「"」で文字列の開始、「\x95」の一文字、そして「\"」、つまり " のエスケープと言う解釈になり、文字列が閉じていないことになります。
ある頃の gcc から、ソースの解釈が UTF8 で行われるようになったようですが、それに加え ShiftJis も処理できるようなオプションが追加されたようです。その方法は、オプションに「-finput-charset=cp932 -fexec-charset=cp932」を追加します。
ただし、現在の MinGW のインストーラーでインストールした gcc では「cc1.exe: no iconv implementation, cannot convert from cp932 to UTF-8」というエラーが出てコンパイルできません。MinGW のディレクトリにある installed.ini にインストールしたファイルが記されていますが、gcc-core-3.4.5-20060117-3.tar.gz だとだめなようです。ためしに古いファイル gcc-core-3.4.5-20060117-1.tar.gz を持ってきてその中の libexec/gcc/mingw32/3.4.5/cc1.exe で上書きすると、正しくコンパイルできるようになります。
g++ も同様の問題を抱えていますが、同様に gcc-g++-3.4.5-20060117-1.tar.gz の libexec/gcc/mingw32/3.4.5/cc1plus.exe を置き換えることで利用可能になります。