No.1ベストアンサー
- 回答日時:
基本的に、呼ぶことができません。
と言うのも、c++ には、関数のオーバーロードと言う機能があって、同じ関数名でも、引数の並び(型や個数)が違うと別の関数として
扱われます。
この機能は c にはありませんから、たとえひとつしかその名前の関数を書いてなくても
オーバーロードの仕組みを持った関数になるわけですから、それは c から呼ぶことは
できません。
> C++関数からCの関数を呼ぶには extern "C" を使うのはわかる
正確には、そうじゃないんです。
c++ は、型のチェックが厳密ですから、関数を呼ぶ場合には、そのプロトタイプ宣言が
必須です。
普通に書くと、c の関数なのか、c++ の関数なのかの区別が付かないので、c の
関数なんだよ、と宣言をするのが extern "C" なんです。
で、本題に戻って、「c++ で記述した関数を c から呼ぶには?」ということなの
ですが、答えは「extern "C" で宣言をした、c++ の関数を作る」ということに
なります。
例えば、以下の関数は思いっきり c++ で記述した関数ですから、関数自体は c++
じゃないとコンパイルできませんが、c から呼ぶことが可能です。
★ヘッダ
#ifdef __cplusplus
extern "C" {
#endif
void print_string(char*);
#ifdef __cplusplus
}
#endif
★ソース
#include "ヘッダファイル"
#include <iostream.h>
void print_string(char* str)
{
cout << str << endl;
}
この回答へのお礼
お礼日時:2001/10/17 09:00
早速の回答ありがとうございました。
例示もあってとても助かりました。
これを参考にプログラムを修正します。
突然プロトタイプの担当者に指名されて
パニック状態なので本当に助かりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Excel(エクセル) Excelで行削除をすると… 1 2023/07/26 11:57
- Excel(エクセル) エクセルからスプレッドシートに数式を移植で起こるエラーについて。 2 2023/08/05 10:56
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- 高校 高校生です。数学に関して、 pとcの違いが全くわかりません。 並べるのはpで選ぶのはc 選ぶだけがc 2 2022/07/23 17:18
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- 数学 【 数I 2次関数 最大・最小 】 問題:関数y=x²+2x+c (-2≦x≦2)の最大値 が5であ 3 2022/06/19 08:41
- Excel(エクセル) エクセル関数のスペシャリストの方、教えてください。 写真のように A列にはデータ C列にはデータの中 7 2022/04/09 00:15
- Excel(エクセル) 関数を教えてください 2 2022/12/29 21:01
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#defineの使い方について
-
リモートデスクトップの接続元I...
-
openCVで動画が読み込めないエ...
-
iostream インクルード時に発生...
-
C++で縦の棒グラフ
-
std::map の const 修飾について
-
atlbase.h と afxwin.hの同時定義
-
wstringの内容を表示させたい
-
ヘッダーファイルがインクルー...
-
ファイル読み込みとmap処理
-
前回のクライアント側のプログ...
-
構文エラーが出ているのですが...
-
セグメンテーションフォルトが...
-
VC++ iostreamの不具合(?)
-
string型のフォーマット書式指...
-
テイラー展開とその精度について
-
コンパイルできません
-
C++ basic_ostreamの拡張
-
Cでのパケットキャプチャについて
-
mapの初期化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報