博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
extern "C"
阅读量:4708 次
发布时间:2019-06-10

本文共 1234 字,大约阅读时间需要 4 分钟。

extern "C"

 
LuChenQun edited this page Mar 30, 2019 · 

在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。

C++虽然兼容C,但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载,C++函数编译后生成的符时带有函数参数类型的信息,而C则没有。

例如int add(int a, int b)函数经过C++编译器生成.o文件后,add会变成形如add_int_int之类的, 而C的话则会是形如_add, 就是说:相同的函数,在C和C++中,编译后生成的符号不同。

这就导致一个问题:如果C++中使用C语言实现的函数,在编译链接的时候,会出错,提示找不到对应的符号。此时extern "C"就起作用了:告诉链接器去寻找_add这类的C语言符号,而不是经过C++修饰的符号。

C++调用C函数的例子: 引用C的头文件时,需要加extern "C"

//cExample.h#ifndef C_EXAMPLE_H#define C_EXAMPLE_Hint add(int x,int y);#endif//cExample.c#include "cExample.h"int add( int x, int y ) {  return x + y;}//cppExample.cppextern "C" {  #include "cExample.h"}int main(int argc, char* argv[]) {  add(2,3);   return 0;}
//Generate cExample.o filegcc -c cExample.cg++ -c cppExample.cppg++ cppExample.cpp cExample.o -o main

注意,如果cppExample.cpp中没有extern "c"的话,会在最后一步链接的时候出错。

C中调用C++函数:extern "C"在C中是语法错误,需要放在C++头文件中。

// cppExample.h#ifndef CPP_EXAMPLE_H#define CPP_EXAMPLE_Hextern "C" { int add( int x, int y ); }#endif// cppExample.cpp#include "cppExample.h"int add( int x, int y ) {  return x + y;}// cExample.cextern int add( int x, int y );int main() {  add( 2, 3 );   return 0;}

Reference: 

转载于:https://www.cnblogs.com/ggzhangxiaochao/p/11419857.html

你可能感兴趣的文章
Git Stash用法
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
memcached 细究(三)
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>
json_value.cpp : fatal error C1083: 无法打开编译器生成的文件:No such file or directory
查看>>
洛谷 P1101 单词方阵
查看>>
Swift DispatchQueue
查看>>
C#和JAVA 访问修饰符
查看>>