Cの関数をC++コードから使うとき、次のことをするためにはどうすれば良いですか?

できればCのコードをあまり変更しない方法を教えてください。
1.Cの関数を任意の名前空間の中におく
2.Cの関数のパラメータをC++コードでパラメタライズする

回答の条件
  • 1人1回まで
  • 登録:2006/12/09 01:58:46
  • 終了:2006/12/16 02:00:04

回答(1件)

id:pascal7 No.1

pascal7回答回数582ベストアンサー獲得回数982006/12/09 09:58:58

ポイント60pt

沢山同じ回答があるかも知れませんが

extern "C" {

#include "Cの関数のヘッダ.h"

}

とすると良いですよ。


ここの説明でわかるのではないでしょうか?

http://www.med.osaka-u.ac.jp/pub/cl-comp/saito/cppintro/cppintro...

C++の開発時にCの関数を呼び出すために準備された機能です。


おまけとして

CからC++の関数を呼ぶときには

シンボルファイルを調べてC++の関数がどの様に名称変形するか調べて変形した後の名前で読んだら良いと思います。

id:merida

質問をちゃんと読んでください。

Cの関数をC++コードから使う方法そのものではありません。

2006/12/09 20:14:21
  • id:Bookmarker
    1.

    namespace 名前空間名 {
    extern "C" {
    #include "Cのヘッダーファイル名"
    }
    }

    namespace 名前空間名 {
    extern "C" {
    #include "Cのソースファイル名"
    }
    }

    2.
    質問の意味がわかりません。
  • id:pascal7
    Cの関数をC++コードから使うとき

    C++からCの関数を使うとき
    と言う質問の書き間違いだったのかなとも思います。
    それともクイズだったのか?

    >2.Cの関数のパラメータをC++コードでパラメタライズする
    と言うのは、C++でコンパイルしてオブジェクトを作ってマップファイルを見ると関数のパラメータが関数名に組み込まれて(名称変形)パラメータ付きの関数名になる事を言っているのだと思います。

    そう言った説明の為にはどのコンパイラを使っているかと言う内容の質問が必要になります。
    また、標準で「extern "C"」の機能が準備されているので、トリッキーな事はするべきではないと思います。

    もし、ソースで持っているのならCソースをC++としてコンパイルするとほぼそのまま使えます。どの様な変更が必要かはソースによるので一概に言えません。
    もし、オブジェクトで持っているのなら「extern "C"」を使ってください。
    Cとしてビルドされたオブジェクトがどの名称空間に割りつけられているかは、名称空間を割り当てない場合のディフォルトのC++の名称空間はコンパイラにより変わるのではないですか?
    どのコンパイラかを指定して再質問してください。
    Cの関数のシンボルは、パラメータを組み込まれないのでパラメータを関数名に組み込む事を前提にしたC++から呼び出せません。「extern "C"」を使用してください。
    と言う事になると思います。

    C++から呼び出せるようにCのソースを名称変形させようと言う話なら、どのコンパイラかと言う情報が必要になります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません