对于extern "C"的说明

原创 2004年07月29日 19:54:00

Mixed-Language Programming with C++

C++ uses the same calling convention and parameter-passing techniques as C, but naming conventions are different because of C++ decoration of external symbols. By causing C++ to drop name decoration, the extern "C" syntax makes it possible for a C++ module to share data and routines with other languages.

The following example declares prn as an external function using the C naming convention. This declaration appears in C++ source code.

extern "C"
{
    void prn();
}

To call functions written in Fortran (or MASM), declare the function as you would in C and use a "C" linkage specification. For example, to call the Fortran function FACT from C++, declare it as follows:

extern "C" { int __stdcall FACT( int n ); }

The extern "C" syntax can be used to adjust a call from C++ to other languages, or to change the naming convention of C++ routines called from other languages. However, extern "C" can be used only from within C++. If the C++ code does not use extern "C" and cannot be changed, you can call C++ routines only by determining the name decoration and generating it from the other language. You can always determine the decoration by using the DUMPBIN utility. Use this approach only as a last resort, because the decoration scheme is not guaranteed to remain the same between versions.

 

Use of extern "C" has some restrictions:

You cannot declare a member function with extern "C".


You can specify extern "C" for only one instance of an overloaded function; all other instances of an overloaded function have C++ linkage.
For more information on the extern "C" linkage specification, seeLinkage Specifications in C++ Language Reference.

 

名字修饰约定extern "C"与extern "C++"浅析

所谓名字修饰约定,就是指变量名、函数名等经过编译后重新输出名称的规则。   比如源代码中函数名称为int Func(int a,int b),经过编译后名称可能为?Func@@YAHHH@Z、?Fu...
  • BeanJoy
  • BeanJoy
  • 2013年06月20日 13:44
  • 8966

C语言中声明和定义的区别——分析extern关键词。

一直很迷惑C语言中的声明和定义的有些实践中的用法,说迷惑实践是因为声明和定义的概念上的区别是很明确的。 定义和声明的区别(主要针对变量): 定义是要为变量分配存储空间,还可以在定义的时候为变量指定...
  • littledouble
  • littledouble
  • 2015年06月03日 08:28
  • 1694

c++中的extern “C”

比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL 输出(Export) 的函数,你需要用extern "C" 来强制编译器不要修改你的函数名。 通常,在C 语言的头文...
  • gongmin856
  • gongmin856
  • 2015年03月12日 22:08
  • 727

extern用法 C和C++混编

1、 声明外部变量   现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是     互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子...
  • g200407331
  • g200407331
  • 2016年08月01日 16:56
  • 2359

extern C作用总结

extern C使用主要用与在C++代码中调用的C函数的声明,或C++中编译的函数要在C中调用,也即是导入C形式的函数库或者提供C类型的库给C调用,...
  • wangjiaoyu250
  • wangjiaoyu250
  • 2015年01月17日 19:48
  • 1326

C语言中extern的用法

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。  1. extern修饰变量的声明。  举例来说,如果文件a.c需要引用b.c中变量...
  • gao1440156051
  • gao1440156051
  • 2015年08月27日 21:38
  • 10508

extern ”C"的使用

本文分析extern “C”的使用方法;介绍C++和C文件相互调用的方式。 extern "C"           extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“ex...
  • u013074465
  • u013074465
  • 2015年01月15日 11:10
  • 5109

C语言中使用extern修饰函数要注意(转)

用extern修饰函数是表示被修饰的函数定义在当前文件外,而该函数用extern声明类型后就可以被当前文件调用了。使用extern修饰某函数时,对该函数的调用是在连接阶段才被处理的。下面我们看一段代码...
  • farmwang
  • farmwang
  • 2015年12月06日 15:43
  • 1210

C语言正确使用extern关键字

转载请注明出处利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数,下面就结合具体的实例,分类说明一下。 一、引用同一个文件中的变量#includeint func();int...
  • xingjiarong
  • xingjiarong
  • 2015年08月14日 08:37
  • 22953

为什么在头文件中有extern "C" ? .

#ifdef __cplusplus extern "C" { #endif 上述的代码片段,经常出现在程序的一些头文件中。有什么用途呢?!今天我来唠叨唠叨。 首先我们要了解一下C/C++中关...
  • s202090414
  • s202090414
  • 2014年02月09日 20:46
  • 1318
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对于extern "C"的说明
举报原因:
原因补充:

(最多只允许输入30个字)