首页 > 编程语言 > 详细

C++中的 extern "C" 的作用

时间:2014-02-21 18:49:02      阅读:386      评论:0      收藏:0      [点我收藏+]

先举个简单的例子,把如下代码保存为test.cpp

bubuko.com,布布扣
extern "C" {
  int foo() {
    return 1;
  }
}

int bar() {
  return 1;
}
bubuko.com,布布扣

然后如下编译为obj文件,g++ -c test.cpp -o test.o

然后运行如下命令 nm test.o (查看obj文件中的symbols names)

得到如下结果

00000000 T foo
0000000a T _Z3barv

这里可以看出区别,如果一个c++文件函数的定义加上了 extern "C" 那么它生成obj文件时,用于链接用的名字会按照c语言obj形式来生成,而不进行name magling。

这样做的好处如下,假设另有一个main.c,如下

bubuko.com,布布扣
#include <stdio.h>
int foo();
int _Z3barv();
int main(){
    _Z3barv();
    foo();
    return 0;
}
bubuko.com,布布扣

可以看到如果c++ 函数不加extern "C" 那么如果想用它的代码进行链接,则需要手动在C源文件中进行转换,没人喜欢这种转换吧。。。

 

C++中的 extern "C" 的作用

原文:http://www.cnblogs.com/imageoneday/p/3558788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!