一般に、クラスライブラリを使用するには 2 つの手順が必要です。まず、ソースコードに適切なヘッダーをインクルードし、次にプログラムをオブジェクトライブラリとリンクします。
C++ 5.0 コンパイラには、2 通りの iostream が実装されています。
従来の iostream : この用語は、C++ 4.0、4.0.1、4.1、4.2 コンパイラに添付された iostream ライブラリ、およびそれ以前に cfront ベースの 3.0.1 コンパイラに添付された iostream ライブラリを指します。このライブラリの標準はありませんが、既存のすべてのコードがこれを使用しています。このライブラリは、互換モードの libC の一部であり、標準モードの libiostream にもあります。
標準の iostream : これは C++ 標準ライブラリ libCstd に含まれていて、標準モードだけで使用されます。これは、バイナリレベルでもソースレベルでも「従来の iostream」とは互換性がありません。
すでに C++ のソースがある場合、そのコードは従来の iostream を使用しており、次の例のような形式になっていると思われます。
// ファイル prog.cc
#include <iostream.h>
int main() {
cout << "Hello, world!" << endl;
return 0;
}
次のコマンドは、互換性モードで prog1.cc をコンパイル、リンクして、prog1 という実行可能なプログラムを生成します。従来の iostream ライブラリは、互換性モードのときにデフォルトでリンクされる libC ライブラリに含まれています。
demo% CC -compat prog1.cc -o prog1
//ファイル prog1.cc
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
次のコマンドは、prog2.cc をコンパイル、リンクして、prog2 という実行可能なプログラムを生成します。コンパイルは標準モードで行われ、このモードでは、標準の iostream ライブラリを含む libCstd がデフォルトでリンクされます。
demo% CC prog2.cc -o prog2
標準ライブラリには、C++ 4.2 コンパイラに付属していた complex ライブラリに似た、テンプレート化された complex ライブラリがあります。標準モードでコンパイルする場合は、<complex.h> ではなく、<complex> を使用する必要があります。互換性モードで <complex> を使用することはできません。
互換性モードでは、リンク時に complex ライブラリを明示的に指定しなければなりません。標準モードでは、complex ライブラリは libCstd に含まれており、デフォルトでリンクされます。
標準モード用の complex.h ヘッダーはありません。C++ 4.2 では、「complex」 はクラス名ですが、標準 C++ では「complex」はテンプレート名です。したがって、旧式のコードを変更せずに動作できるようにする typedef を使用することはできません。
このため、複素数を使用する、4.2 用のコードで標準ライブラリを使用するには、多少の編集が必要になります。たとえば、次のコードは 4.2 用に作成されたものであり、互換性モードでコンパイルされます。
// ファイル ex1.cc (互換モード)
#include <iostream.h>
#include <complex.h>
int main()
{
complex x(3,3), y(4,4);
complex z = x * y;
cout << "x=" << x << ", y=" << y << ", z=" << z << endl;
}
次の例では、ex1.cc を互換モードでコンパイル、リンクし、生成されたプログラムを実行しています。
demo% CC -compat ex1.cc -library=complex demo% a.out x=(3, 3), y=(4, 4), z=(0, 24)
次は、標準モードでコンパイルされるように ex2.cc と書き直された ex1.cc です。
// ファイル ex2.cc (ex1.cc rewritten for standard mode)
#include <iostream>
#include <complex>
int main()
{
std::complex<double> x(3,3), y(4,4);
std::complex<double> z = x * y;
std::cout << "x=" << x << ", y=" << y << ", z=" << z << std::endl;
}
次の例では、書き直された ex2.cc をコンパイル、リンクして、生成されたプログラムを実行しています。
demo% CC ex2.cc demo% a.out x=(3,3), y=(4,4), z=(0,24)
次の表は、C++ ライブラリにリンクするためのコンパイラオプションをまとめています。詳細は、「-library=l[,...l]」を参照してください。
|
ライブラリ |
コンパイルモード |
オプション |
|---|---|---|
|
従来の iostream |
-compat=4 -compat=5 |
不要 -library=iostream |
|
complex |
-compat=4 -compat=5 |
-library=complex 不要 |
|
Tools.h++ v7 |
-compat=4 -compat=5 |
-library=rwtool7 -library=rwtool7,iostream |
|
Tools.h++ v7 デバッグ |
-compat=4 -compat=5 |
-library=rwtool7_dbg -library=rwtool7_dbg,iostream |
|
ガベージコレクション |
-compat=4 -compat=5 |
-library=gc -library=gc |
|
ガベージコレクション デバッグ |
-compat=4 -compat=5 |
-library=gc_dbg -library=gc_dbg |