C++ 移行ガイド | ![]() ![]() ![]() ![]() ![]() |
第 6 章
C から C++ への移行
この章では、C プログラムを C++ プログラムに移行する方法について説明します。
一般的に、C プログラムを C++ プログラムとしてコンパイルするにあたって必要な修正はほとんどありません。C と C++ はリンク時の互換性があるため、C++ コードとリンクするために、コンパイル済みの C コードを修正する必要はありません。C++ 言語の個別の情報につては、『The C++ Programming Language』(Margaret A. Ellis、Bjarne Stroustrup 共著) を参照してください。
予約キーワードと事前定義済みのキーワード
表 6-1 に、C++ および C の全予約キーワードと、C++ で事前定義されているキーワードを示します。C++ では予約されていて、C では予約されていないキーワードは太字で示しています。
__STDC__
は、あらかじめ値 0 に定義されています。たとえば、次のコードがあるとします。
#include <stdio.h>main(){#ifdef __STDC__printf("yes\n");#elseprintf("no\n");#endif#if __STDC__ ==0printf("yes\n");#elseprintf("no\n");#endif}
yesyes次の表は、ISO C++ 標準委員会の現在の ANSI/ISO 検討資料に指定されている、演算子と句読文字の代替表現のための予約語を示したものです。
表 6-2 演算子と句読文字に対する C++ の予約語 and
bitor
not
or
xor
and_eq
compl
not_eq
or_eq
xor_eq
bitand
汎用ヘッダーファイルの作成
K&R C、ANSI C、C++ にはそれぞれ異なるヘッダーファイルが必要です。C++ ヘッダーファイルを K&R C 標準と ANSI C 標準に準拠する汎用ヘッダーファイルにするには、マクロ
__cplusplus
を使って、C++ コードと C コードを分離する必要があります。また、マクロ__STDC__
は ANSI C にも C++ にも定義されています。C++ や ANSI C コードを K&R C コードと分離するには、このマクロを使用します。詳細は、『C++ プログラミングガイド』を参照してください。
注 - 以前の C++ コンパイラが事前定義していたマクロc_plusplus
は、現在はサポートされていません。代わりに__cplusplus
を使用してください。
C 関数へのリンク
コンパイラは、C++ 関数名を符号化して、多重定義を可能にします。C 関数あるいは「C 関数を装った」C++ 関数を呼び出すには、
extern "C"
宣言を使用して、この符号化が行われないようにする必要があります。次に例を示します。
extern "C" {double sqrt(double); //sqrt(double) は C リンケージを持つ}
このリンケージ指定によって
sqrt()
を使用するプログラムの意味が変わることはありません。sqrt()
に対して、コンパイラが C の命名規則を使用することになるだけです。C リンケージを持つことができるのは、複数の多重定義の C++ 関数のうちの 1 つだけです。つまり、C プログラムから呼び出す C++ 関数に C リンケージを使用することはできますが、使用できるのは、その関数の 1 つのインスタンスだけということになります。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |