[ C++で開発 ]

Visual C++ 6.0

MicrosoftがリリースしているWindows用(9x/Me/NT/2000/XP)アプリケーションを開発するC++環境です。

概要

言語仕様

Visual C++6.0は、C++標準仕様に対して90%程度の適合度と云われています。

入手

Visual C++ 6.0は多分新規には購入不可能かと思われます。

サービスパック

2003年1月3日現在、サービスパック5が出ています。申し込めば無償でCD-ROMを入手することができます。また、ダウンロードもできるようです。

パッチ

STLのバグ修正

環境

コマンドライン環境

コマンドプロンプト上で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"

コマンドラインでのビルド

コンパイル

Hello Worldのビルド

まずは何も考えずに単純なC++ Helloプログラムを作ってビルドしてみます。

hello.cpp
#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>

これでとりあえず気持ち悪さは解消されました。

hello.cppのコンパイル(リンクはしない)

ソースファイルをオブジェクトファイルにコンパイルするだけの場合は、/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,スタティックリンク)の種類があります。作成したプログラムに応じて適切なライブラリとリンクします。

コンパイル・リンク・オプション