自分の環境はwindows Vista + Cygwin + zsh です.

まず,環境変数LANG=ja_JP.SJISにすれば,lsなどの出力で日本語ファイル名が文字化けする問題は解決すると思います.

しかし,なぜかc言語で書いたプログラムをgccでコンパイルするときに出るエラーが文字化けしてしまいました.

この原因を解決するために YACI/基本的な作り方 - Co-Coa Wiki
を参考にして, 環境変数OUTPUT_CHARSET=sjis としてやると,無事に日本語で文字化けすることなく出力されました.

しかし,「警告: 制御が非void 関数の終りに到達しました」 という日本語のエラーメッセージはなんかかっこ悪い.

エラーメッセージは英語のほうが慣れているというのもあって,結局エラーメッセージを英語で出力することにしました.

それは、環境変数LC_MESSAGES=C としてやるとokです.

環境変数を変える方法としては,コントロールパネルのシステムの詳細設定から変えるか,または.zshrc(bashの人は.bashrc)に

export LANG=ja_JP.SJIS
export OUTPUT_CHARSET=sjis
export LC_MESSAGES=C

などと記述してやればokです.