程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++中extern C 的感化剖析

C/C++中extern C 的感化剖析

編輯:關於C++

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++法式設計有必定的自創價值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved