• ベストアンサー

VC++ の コンパイルオプション

最近、マイクロソフトの VC++ Ver.6を買いました。  解説を読んで、文字コードのオプションとして、 _MBCS と  _UNICODE があることを知りました。  今までは、ボーランドの古いコンパイラを 使っていましたので、文字コードは ShiftJIS でした。  皆さんは、どんなものを作るときに、 どちらのオプションを選んでいますか? また、OS の現状からみて、どちらがお勧めですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

通常は、指定してあるとすれば_MBCSでしょう。 なぜなら、UNICODE対応のWindowsAPIは、Win9x系には存在しないからです。 なので、9x系とNT系の両方に対応させようとすると、必然的にUNICODEは使用できません。 半角文字(MBCSの1バイト文字)と全角文字(MBCSの多バイト文字)の違いを意識する必要がなく、 Win2000やWinXPのみ動作対象とするアプリを作成するのであれば、UNICODEにしたほうが動作が 速くなるはずなのでいいのではないでしょうか? ちなみに、_MBCS、_UNICODEの指定で定義が変わるのは、ほとんどがTCHAR.Hの内容です。 興味があれば覗いてみてください。 それぞれの定義によって、_tが先頭についている関数がどのように置き換えられるかがわかります。 また、UNICODE対応のAPIを使用するには、_UNICODEだけではなく、 UNICODEも#define等で指定する必要があります。

uyama33
質問者

お礼

NT を使っているせいか、 いつの間にか UNICODE になってしまっていて、何か変だったのです。 TCHAR.Hの内容です。 興味があれば覗いてみてください。 それぞれの定義によって、_tが先頭についている関数がどのように置き換えられるかがわかります。 これについては、マニュアルを読みましたので分かりました。 参考にしている ソースファイルが L("abn.txt") のような表現を含んでいるので、 ユニコードをやめると問題が起こるかもしれませんが SJIS でやってみます。 ありがとうございました。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

普通にVC++を使う文にはSJISを使用します。 UNICODEを使えば将来性はあがるかもしれませんが 古いライブラリを使う場合にUNICODEだとエラーを 起こす危険があります。 OSという観点からはWindowsは内部処理を全て UNICODEでおこなっているのでUNICODEの方が 処理速度的には速いのかもしれません。 たいていのWin32APIはSJIS用とUNICODE用がそれぞれが用意されています。 今はSJIS→UNICODEの過渡期といったところでしょうか。

uyama33
質問者

お礼

 ありがとうございます。 エディタを作ってみたら それが、他のワープロで読めなかったので びっくりしました。 SJIS を使うようにします。

関連するQ&A

  • VC++ の設定

    VC++ 6.0 を使っています。 ボーランドのコンパイラを長く使っていて VC++のコンパイル時の 設定がよく分からなくて、 URelease のなかで、MBCS , DEBUG などの 設定をしてしまいました。  とりあえず、 Debug 版の設定を MBCS , DEBUG などとして コンパイルできました。予定通り動いています。 Release 版では MBCS , NDEBUG の設定で コンパイルとリンクはできました。 しかし、ハングアップします。  リストコントロールの画面で 項目をクリックするとハングアップします。 デバッグ版ではハングアップしません。  設定、およびソースコードの書き方で ハングアップの原因となりやすい物は何でしょうか? アドバイスをお願いいたします。

  • DLL の中の関数呼び出し

     Windows NT workstation Ver4.0 の上で、ボーランドC++ Ver5 を使って、owl を使ったソフトを作っています。  メーラーを作ろうとして、blatj のソースコードを組み込んでいます。 その中で、gensock.dll を読み込んで、その中の関数を呼び出すところがあるのですが、関数のエイトりーポイントが NULL で返ってきます。  自作した他の DLL については、関数の呼び出しは、 順調なのですが、この gensock.dll については上手くゆかないのです。  そこで、 ボーランドのDLLと、マイクロソフトのDLLでは 呼び出し方にどのような違いがあるのでしょうか?  Win API を使ってみても  TModule を使ってみても 同じような現象が起きています。  解決方法は gensock.dll のソースコード を使ってボーランドのコンパイラでDLLを作り直す以外には無いのでしょうか?

  • 文字コードについて!

    文字コードについて! 文字コードのこれまでの歴史的経緯と 現状ではどのような場面で用いられているか が、調べても良く分からないので知ってらっしゃる方いませんか? ASCII、JIS、ShiftJIS、EUC,unicode どれか1つでも結構です(*Δ*) 様々な文字コードについての感想 インターネットにおける文字の扱いについても 個人的な意見でいいので、あれば聞かせてください^^

  • コンパイラオプション? VC2005設定?

    Visual Studio 2005で MFCを使って、πの計算や、大きな桁の計算を高速で行う為に、64bitのコードを生成したいのですが、普通にコンパイルするとRelease Win32でコンパイルされると思います。 設定方法について詳しく書かれているサイトや書籍をご存じの方教えて下さい。 make出力は可能なのでしょうか? VC6にあったような・・・ コンパイラオプション? 環境 マシン Xeon 64bit Windows Vista Ultimate VS2005 C++ MFCアプリ

  • C++の選択

    C++を勉強してる初心者です。 現在ボーランドのC++コンパイラー5.5を 使っているのですが、ウインドウプログラム を作りたいと思っています。 VC++Ver6.0は持っているのですが C++ビルダーは持っていません。 1、C++ビルダーにするかVC++Ver6.0に   するか迷っています。(   仕事に生かしたいと思っているのですが   (現在、IT業界ではありません)   どちらが需要があるのでしょうか? 2、どちらが初心者になじみやすいでしょうか?

  • コンパイル環境:

    コンパイル環境:  Windows XPで、CD版プロフェッショナルVC++ 6.0 に Vs6sp6(Downloadしたもの)をパッチ。 プロジェクトはMFC AppWizard(exe)、SDI(S)、日本語、後はデフォルトです。 エラー内容:  プロジェクトの設定のC/C++タブのプリプロセッサの定義で、  _MBCSを _UNICODE にすると下記のエラーが出ます。  マイクロソフトでは2005年版以降のエラー処理は書いて有りますが、  VC++ 6.0が無くて良くわかりません。教えて下さい。 msvcrtd.lib(crtexew.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です。 Debug/Jptest.exe : error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー

  • VISTA対応Cコンパイラについて

    今、VISTA対応のフリーのコンパイラを探しています。 ただ、VC++2008エクスプレスエディションだと、 リソースファイルが入ってないのでダメです。 ボーランドもダメでした。 VC++6.0を久々に入れようとしたらできませんでした。 出来れば、フリーソフトでおねがいします。 また、リソースファイルの作成、またはボーランドをVISTAに 対応できるようになれば教えてください。

  • gccの最適化オプションで挙動がおかしくなる

    コンパイラの最適化オプション -Osをつけると、下記のソースの終了コードが255になってしまいます。 最適化を行わない時や最適化を-O1にしたときは、0を返します。 本来は0が返ると思うのですが、なにかコードの書き方に何か問題ありますでしょうか? 環境は、 gcc 4.2、Mac Xcode 3.1.4上でテストしています。 また、ソースの文字コードの種類はSJISにしています。 const unsigned char gStr[3]="\x82\xAC"; int main(int ac, char **av) {  const unsigned char cc=0x82;  if(gStr[0]==cc)   return 0;  else   return 0xff; }

  • VC6が起動できません。

    いつもの様に会社に来てからパソコンの電源を入れて、昨日の続きからソフトを作ろうと思い、これもいつもの様にVC++Ver6アイコンをクリックしました、するとタイトル画面が出たと思いきや、 「0x77fcc00aの命令が0x0019fff8のメモリを参照しました。メモリが"read"になることはできませんでした。」と言う、Msdev.exe-アプリケーションエラーが出ました。タイトル画面から先に進みません。 思い切ってVC++をインストールし直して見ましたが症状は変わりません。いったい何が起きたのか、さっぱりわかりません。 どなたか御わかりになる方、すみませんが対処両方を御教えください。 サービスパック6はあててあります。他のマイクロソフトの製品、VBやエクセル、ワードは正常に動作しています。OSは2000です。 VC6って古いから、もう動かないのかなあ。どうかよろしく御願いします。

  • VC++.NET と UTF-8

    C++ で書いたソースコードに UTF-8 エンコーディングで(日本語の)コメントをつけたのですが、そのコードを Visual Studio .NET でコンパイルするとコンパイルエラーになりました。 コメントを全部削除したらコンパイルできましたし、intel コンパイラ (windows/linux)、gcc (3.4.4 linux) ではコンパイルできたのですが、VC は UTF-8 が含まれているとコンパイルできない場合があるのでしょうか?あるいはソースが UTF-8 のときに有効なコンパイルフラグなどがあるのでしょうか?ちなみに IDE 上ではそれらのコメントは(文字化けなどなく)ちゃんと表示されてはいます。 よろしくお願いします。

専門家に質問してみよう