できればCのコードをあまり変更しない方法を教えてください。
1.Cの関数を任意の名前空間の中におく
2.Cの関数のパラメータをC++コードでパラメタライズする
沢山同じ回答があるかも知れませんが
extern "C" {
#include "Cの関数のヘッダ.h"
}
とすると良いですよ。
ここの説明でわかるのではないでしょうか?
http://www.med.osaka-u.ac.jp/pub/cl-comp/saito/cppintro/cppintro...
C++の開発時にCの関数を呼び出すために準備された機能です。
おまけとして
CからC++の関数を呼ぶときには
シンボルファイルを調べてC++の関数がどの様に名称変形するか調べて変形した後の名前で読んだら良いと思います。
namespace 名前空間名 {
extern "C" {
#include "Cのヘッダーファイル名"
}
}
namespace 名前空間名 {
extern "C" {
#include "Cのソースファイル名"
}
}
2.
質問の意味がわかりません。
↓
C++からCの関数を使うとき
と言う質問の書き間違いだったのかなとも思います。
それともクイズだったのか?
>2.Cの関数のパラメータをC++コードでパラメタライズする
と言うのは、C++でコンパイルしてオブジェクトを作ってマップファイルを見ると関数のパラメータが関数名に組み込まれて(名称変形)パラメータ付きの関数名になる事を言っているのだと思います。
そう言った説明の為にはどのコンパイラを使っているかと言う内容の質問が必要になります。
また、標準で「extern "C"」の機能が準備されているので、トリッキーな事はするべきではないと思います。
もし、ソースで持っているのならCソースをC++としてコンパイルするとほぼそのまま使えます。どの様な変更が必要かはソースによるので一概に言えません。
もし、オブジェクトで持っているのなら「extern "C"」を使ってください。
Cとしてビルドされたオブジェクトがどの名称空間に割りつけられているかは、名称空間を割り当てない場合のディフォルトのC++の名称空間はコンパイラにより変わるのではないですか?
どのコンパイラかを指定して再質問してください。
Cの関数のシンボルは、パラメータを組み込まれないのでパラメータを関数名に組み込む事を前提にしたC++から呼び出せません。「extern "C"」を使用してください。
と言う事になると思います。
C++から呼び出せるようにCのソースを名称変形させようと言う話なら、どのコンパイラかと言う情報が必要になります。