[ C++で開発 ]
MicrosoftがリリースしているWindows用(9x/Me/NT/2000/XP)アプリケーションを開発するC++環境です。
Visual C++6.0は、C++標準仕様に対して90%程度の適合度と云われています。
Visual C++ 6.0は多分新規には購入不可能かと思われます。
2003年1月3日現在、サービスパック5が出ています。申し込めば無償でCD-ROMを入手することができます。また、ダウンロードもできるようです。
コマンドプロンプト上でVC++のツールを使用するためには、環境設定が必要です。Visual C++をインストールした際に、環境設定を行うバッチファイルが含まれています。
<Visual C++インストールディレクトリ>\VC98\Bin\VCVARS32.BAT
コマンドプロンプト(cmd.exe)上で毎回上記のバッチファイルを実行するのは面倒なので、コマンドプロンプトのショートカットを実行時に自動的にバッチファイルを実行するように設定します。ショートカットのリンク先を以下のようにします。(D:\Program Files\Microsoft Visual StudioにVC++をインストールしていた場合)
%SystemRoot%\system32\cmd.exe /k "D:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
まずは何も考えずに単純なC++ Helloプログラムを作ってビルドしてみます。
#include <iostream> int main(int argc, char* argv[]) { std::cout << "Hello, World!" << std::endl; return 0; } |
cl.exeを実行します。ウォーニングがどかどか出ますが、実行ファイルが生成されました。
C:\work> cl hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. hello.cpp C:\PROGRA~1\MICROS~1\VC98\INCLUDE\istream(547) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\ostream(234) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 D:\PROGRA~1\MICROS~1\VC98\INCLUDE\ostream(229): クラス テンプレートのメンバ関数 'c lass std::basic_ostream<char,struct std::char_traits<char> > &__thiscall std::ba sic_ostream<char,struct std::char_traits<char> >::put(char)' のコンパイル中 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\ostream(234) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 D:\PROGRA~1\MICROS~1\VC98\INCLUDE\ostream(229): クラス テンプレートのメンバ関数 'c lass std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > &__thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::put(unsigned short)' のコンパイル中 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\istream(46) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 D:\PROGRA~1\MICROS~1\VC98\INCLUDE\istream(41): クラス テンプレートのメンバ関数 'bo ol __thiscall std::basic_istream<char,struct std::char_traits<char> >::ipfx(bool )' のコンパイル中 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\istream(46) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 D:\PROGRA~1\MICROS~1\VC98\INCLUDE\istream(41): クラス テンプレートのメンバ関数 'bo ol __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::ipfx(bool)' のコンパイル中 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\xstring(525) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 D:\PROGRA~1\MICROS~1\VC98\INCLUDE\xstring(521): クラス テンプレートのメンバ関数 'v oid __thiscall std::basic_string<char,struct std::char_traits<char>,class std::a llocator<char> >::_Copy(unsigned int)' のコンパイル中 C:\PROGRA~1\MICROS~1\VC98\INCLUDE\ostream(296) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。 hello.cpp(5) : コンパイルされたクラスのテンプレートのインスタンス化 'class std::basic_ostr eam<char,struct std::char_traits<char> > &__cdecl std::operator <<(class std::ba sic_ostream<char,struct std::char_traits<char> > &,const char *)' の参照を確認し てください Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:hello.exe hello.obj C:\work> |
しかしウォーニングだらけで非常に気持ち悪いですね。C++例外を使用するにはGXオプションを付けてコンパイルしなければならないようです。
C:\work>cl /GX hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. hello.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:hello.exe hello.obj C:\work> |
これでとりあえず気持ち悪さは解消されました。
ソースファイルをオブジェクトファイルにコンパイルするだけの場合は、/cオプションを指定します。
C:\work>cl /c /GX hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. hello.cpp C:\work> |
標準Cライブラリ(LIBC)には、シングルスレッドとマルチスレッド(DLL,スタティックリンク)の種類があります。作成したプログラムに応じて適切なライブラリとリンクします。