研究ノートの内容から:Ditaiソフトウェア・カレッジTangzuo林先生のビデオ、私はあなたの指導に感謝します
関数のオーバーロード関数ポインタは会いました:
関数ポインタに割り当てられた多重定義関数の名前場合:
1.関数ポインタ引数リスト候補と一致するルールオーバーロードの選択
正確候補関数ポインタと一致する関数タイプと機能タイプ2、即ち、関数の戻り値のタイプでもあります試合へ
例えば:
int func(int a)
{
return a;
}
int func(int a,int b)
{
return a+b;
}
void func(int a)
{
std::cout<<a<<std::endl;
}
typedef int(*PFUNC)(int a)
PFUNC P = FUNCを呼び出すとき、マッチが最初の関数であるとき、
注:
1.過負荷機能は同じスコープ内で発生しなければならない
関数の戻り値の型パラメータリストや機能を選択する2.コンパイラのニーズを
3オーバーロードされた関数は、関数名によって直接得ることができないエントリアドレスを
正しいアプローチです。
printf(“%p\n”,int(*)(int)func);
printf(“%p\n”,int(*)(int,int)func);
printf(“%p\n”,void(*)(int)func);
C ++とCは、お互いを呼び出します
互いを呼び出す1.実用的なエンジニアリングC ++やCコードは避けられ
2.C ++ C言語と互換性のある方法コンパイルするコンパイラ
3.C ++コンパイラは、C ++コンパイラの方法を使用することを好むであろう
だけCに(4.externキーワード++ )C ++コンパイラCコンパイラモードを強制することができます
extern “C”
{
//code...
}
たとえば、次のように
add.hファイルで:
int add(int a,int b);
add.cファイルで:
int add(int a,int b)
{
return a+b;
}
我々はmain.cppにのように、ファイルにadd.h C ++のヘッダファイルを参照したいとき以上の2つのファイルが、C言語であります
#include <stdio.h>
extern “C”
{
#include “add.h”
}
int main()
{
int c = add(1,2);
printf(“c = %d\n”,c);
return 0;
}
だから、それはコンパイルすることを、そうでない場合、コンパイラはその指摘追加機能がadd.c代わりadd.cppに定義されているため、定義されていない機能を
Cコンパイラに特定のCコードを確保するために、どのようにそれをコンパイル?
A:_cplusplus C ++コンパイラ、マクロ標準マクロでは、すべてのC ++コンパイラはこの機能を利用する、持っている、あなたがこれを行うことができます:
#ifdef _cplusplus
extern “C”
{
#endif
//C code...
#ifdef _cplusplus
}
#endif
注意事項
1.C ++コンパイラがオーバーロードし、C関数をコンパイルすることはできません
関数名をコンパイルすることを決めた。2.コンパイルターゲットの名前である
オブジェクト名にコンパイル3.C ++コンパイラモードの関数名とパラメータリスト
関数名をコンパイルする4.C唯一の方法ターゲット名としてコンパイル