C/C++中extern "C" 的感化剖析。本站提示廣大學習愛好者:(C/C++中extern "C" 的感化剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C/C++中extern "C" 的感化剖析正文
我們常常會在C/C++法式中見到extern "C",這是一個很主要的概念。本文就來以實例情勢講述C/C++中extern "C"的感化。分享給年夜家供年夜家參考之用。詳細剖析以下:
感化:完成C和C++混雜編程。
道理:C和C++編譯器編譯以後,函數名會編譯成分歧的名字,鏈接階段名字查找會找不到目的,前面實例中會詳解。
用法:
①.c文件中界說的函數,.cpp文件要挪用時,該.cpp文件中要用extern "C"聲明該函數;
②.反過去,.cpp文件中界說的函數,.c文件要挪用,則異樣要在.cpp文件頂用extern "C"聲明,.c文件只用通俗的extern聲明。
兩個源文件分離編譯成.o文件,再鏈接成履行文件。鏈接.o文件生成履行文件時,必需得用g++。
實例:
在源文件中聲明的,沒有頭文件
.c文件界說的函數,.cpp文件挪用:
//.c文件界說的函數 extern int myadd(int a, int b); int myadd(int a, int b) { return a+b; }
//.cpp文件挪用 #include <iostream> using namespace std; extern "C" int myadd(int a, int b); int main() { cout << myadd(3, 7) << endl; return 0; }
.cpp文件界說的函數,.c文件挪用:
//.cpp文件界說的函數 extern "C" int myadd(int a, int b); int myadd(int a, int b) { return a + b; }
//.c文件挪用 #include <stdio.h> extern int myadd(int a, int b); int main() { printf("%d\n", myadd(3, 7)); return 0; }
假如在頭文件中聲明,則.c文件正常的包括該頭文件,.cpp文件應當用
//.cpp文件的包括方法 extern "C" { #include "myHead.h" }
的方法來包括頭文件,該頭文件中聲明的函數都為C方法編譯。
道理彌補:C文件中,上述函數編譯以後的函數名為相似於_myadd的情勢,而CPP的編譯以後函數名為相似於_myadd_int_int的情勢,由於CPP要支撐重載,用這類方法來差別重載的函數。
信任本文所述對年夜家的C++法式設計有必定的自創價值。