简单理解extern "C"

原创 2013年12月05日 01:34:19

    首先明确一点就是以.c为扩展名的源文件a.c(a代表文件名),vs按照C的编译方式进行编译;以.cpp为后缀的源文件a.cpp,按照C++的编译方式进行编译,而C++是面向对象的,支持函数重载,所以编译器对函数的处理和C有所不同。这个时候如果在另外一个源文件b.cpp中包含a.h时就会出现”无法解析的外部符号错误“,原因就是在b.cpp中a.h中的函数按照C++编译方式进行处理,在a.c中函数按照C的方式进行处理,所以找不到对应函数的定义(编译器处理后的函数名不同)。这时就需要extern ”C"对a.h进行包含,告诉编译器a.h中的函数按照C方式进行编译。

//a.h
void TestExternC();
//a.c
#include "a.h"
#include <stdio.h>
void TestExternC()
{
    printf("test\n");
}
//b.cpp
extern "C"
{
    #include "a.h"
}
int main()
{
    TestExternC();
    return 0;
}


深入理解extern "C"

在用C/C++的项目源码中,经常会看到下面结构的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } ...
  • ywcpig
  • ywcpig
  • 2016年08月18日 16:49
  • 369

深入理解extern "C"

http://www.cnblogs.com/lichkingct/archive/2009/07/21/1527893.html一、从C与C++编译连接方式深入理解extern "C".C和C++对...
  • hwizhao
  • hwizhao
  • 2011年07月07日 17:42
  • 208

浅谈 变量以及函数的声明以及定义,以及对extern “C”的理解

对extern “C” 函数声明与定义 变量声明与定义 static extern 做了教详细的介绍...

深入理解extern "C" 的使用

前言最近用到了动态库的函数dlsym函数,其作用是返回指定符号函数的地址。详见 深入理解Linux动态库和静态库http://blog.csdn.net/u013616945/article/de...

理解extern "C"

关于extern “C”的来龙去脉,摘录的三篇网友文章,如下:http://www.yuanma.org/data/2006/0830/article_1438.htm1、  引言C++语言的创建初衷...

C++简单代码示例说明extern用法

  • 2012年10月25日 14:35
  • 2KB
  • 下载

理解extern "C",C++函数与C函数互调

为什么需要extern “C”? extern “C” 是编译器链接指示符。需要知道,对于不同的编译器,在编译一个函数时,编译出来的函数名称或参数排列的顺序可能是不同的。这就导致用一种语言去调用另一...

深入理解C/C++混合编程(关于#ifdef __cplusplus extern "C" {...}的用法)

本篇文章是对C/C++混合编程进行了详细的分析介绍,需要的朋友参考下。         在工作中,C、C++密不可分,做我们嵌入式方面的,当然更多的是C,但,有时候却少不了C++,而且是C、C++混搭...
  • zzwdkxx
  • zzwdkxx
  • 2015年03月13日 18:20
  • 3277

extern C详细解释

  • 2007年09月03日 16:28
  • 56KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单理解extern "C"
举报原因:
原因补充:

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