基本作用:
一:extern有两个作用
作用一:当其与"C"一起连用时,如extern “C” void m_simtest(int runtime_t)(注意这个函数可以使在实际项目开发中动态库中的函数,这个函数的实现基于C约定的风格)。为什么要这么用:因为C++相较于C支持函数重载,不同的编译器在编译源代码的时候会出现不同的解释。而C不支持函数重载,所以extern “C” ,也就限制了C++代码编译的时候的重载,使得编译器在编译m_simtest函数时遵从C规则。
作用二:就是声明函数或全局变量的作用范围的关键字,具体用法可以参考我上篇博客。静态变量与全局变量。

二:博客主要内容:
本篇博客主要将extern的第一个用法,也就是作用一extern C。
1.在C++中引用C语言的函数如下代码:

//cExample.h
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
int add(int x,int y);
#endi

声明C接口的头文件

//cExample.c文件
#include "cExample.h"
int add( int x, int y )
{
return x + y;
}

这个文件用来生成动态库windows下dll,linux下so

//cppFile.cpp
#include <iostream>
extern "C"
{#include "cExample.h"
}using namespace std;
int main(int argc, char* argv[])
{cout <<add(2,3)<<endl;return 0;
}

用来验证在cpp中调用动态库中的C接口的测试cpp文件。

这里如果cppFile.cpp中不加extern C在linux中将会出现如下编译报错
usr/bin/ld: /tmp/ccFaycx3.o: in function main': cppFile.cpp:(.text+0x1e): undefined reference toadd(int, int)’
collect2: error: ld returned 1 exit status
make: *** [Makefile:18:test] 错误 1。
原因分析:C++中调用C风格实现的接口,包含的头文件或者是调用的接口需要用extern "C"修饰。
ubuntu中编译makefile

src = $(wildcard ./src/*.c )
srcpp = $(wildcard ./src/*.cpp)
obj = $(patsubst ./src/%.c,./compile/%.o,$(src))inc_path = ./inclib_path = ./libcompile_file = ./compilemyArgs = -Wall -g
ALL:test#test:$(lib_path)/libcExample.so $(srcpp)#gcc $^ -o $@ $(myArgs) -l cExample -L ./lib
test:lib/libcExample.so \src/cppFile.cppg++ -o test ./src/cppFile.cpp -l cExample -L ./lib -I $(inc_path)
#libcExample.so: $(obj)#gcc -shared -o $(lib_path)/libcExample.so $^ $(myArgs)
lib/libcExample.so:compile/cExample.ogcc -shared -o lib/libcExample.so compile/cExample.o
#$(obj):./compile/%.o:./src/%.c#gcc -c $< -o $@ $(myArgs) -I $(inc_path) -fPIC
compile/cExample.o:src/cExample.cgcc -o compile/cExample.o -c src/cExample.c -I $(inc_path) -fPICclean:rm -rf lib/* compile/* test
.PHONY: clean ALL

了解内容:
C中调用C++接口
可参考博客C++中extern C含義深層探索

C++中extern关键字相关推荐

  1. C++中extern关键字使用 http://blog.csdn.net/sruru/article/details/7951019

    C++中extern关键字使用 分类: C++ 语法 2012-09-06 15:37 327人阅读 评论(0) 收藏 举报 c++编译器 chapter 1 . extern关键字的作用 exter ...

  2. C/C++中extern关键字详解

    1 基本解释 :extern可以置于变量或者函数 前,以标示变量或者函数的定义在别的文件中 ,提示编译器遇到此变量和函数时在其他模块中寻找其定义 .此外extern也可用来进行链接指定. 也就是说ex ...

  3. C/C++中extern关键字详解与应用

    1.引言:多文件结构中,对全局变量(global variance)的体会 全局变量的好处是毋庸置疑的.方便在各个子模块和局部域中使用.所以,全局变量很适合做众多模块之间的公共交流与通信. 在单文件结 ...

  4. C/C++中extern关键字详解[zz]

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  5. C++中extern关键字的作用

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  6. [UE4]C++中extern关键字浅谈

    变量声明和变量是有区别的 extern int i; //只是声明i而非定义i int j; //声明而且还定义了j 任何一个显式初始化的声明都将成为定义,而不管有没有extern,extern语句一 ...

  7. C/C++中extern关键字

    1. 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 此外extern也可用来进行链接指定. extern & ...

  8. c/c++ 中 extern 用法

    c/c++ 中extern 关键字 详细参考http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 基本解释: exte ...

  9. 浅谈C/C++中的static和extern关键字

    一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数.在不同的情况下static的作用不尽相同. (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的 ...

最新文章

  1. 报表性能优化方案之报表服务器优化基础讲解
  2. 《JavaScript高效图形编程(修订版)》——6.2 位图、矢量图,或两者兼而有之?...
  3. 2021年8月最新sci-hub可用网址,高速稳定
  4. Chrome浏览器里的-webkit-focus-ring-color
  5. Spring Bootstrap中具有配置元数据的高级配置
  6. huffman图像编码C语言,Huffman编码的c语言实现
  7. AndroidStudio基本设置,以及一些使用小技巧
  8. windows优化大师怎么用_软件不能用又卸载不掉怎么办——用Windows自家的卸载工具吧(dos级卸载)...
  9. postgre 表被加锁无法解锁问题
  10. opencv双线程图片处理_打开正经图片,你可能会看到一张黄图,这种造假方法能同时骗过 AI 和人眼...
  11. php环境用什么服务器好些_PHP环境部署,Linux真的比Windows好吗?
  12. 《公路测设技术》课程网课最新作业测验考试
  13. 哈佛大学有没有计算机专业,美国哈佛大学计算机专业课程有哪些?
  14. 解决win7 svchost占用CPU过高的问题
  15. HTML5期末大作业:旅游网站设计——中国风的旅游网站(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码...
  16. 《精通以太坊》预言机
  17. 新必应 new bing【NB】这不比知云翻译香
  18. java排班算法-几班几倒
  19. Flutter-RefreshIndicator不能下拉刷新
  20. php调用lol数据库,计算lol战斗力

热门文章

  1. 软件概要设计文档(终)
  2. Java坦克大战(四)
  3. java线程的小问题与回答
  4. 初识多线程之基础知识与常用方法
  5. Fragment懒加载预加载
  6. Matlab实用技巧
  7. JDK源码分析-收藏地址
  8. Oracle TNS-12535: TNS: 操作超时
  9. 52 -算法 -数据结构类 Leetcode26 删除有序数组中的重复项
  10. 尾气冒黑烟是什么问题_老司机教你从尾气颜色就判断出爱车的“身体状况”