【C++】extern

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。

extern “C”

1.目的:

为了能够正确实现C++代码调用其他C语言代码,会指示编译器extern "C"修饰的变量和函数是按照C语言方式进行编译和链接的

2.原理:

作为一种面向对象的语言,C++支持函数重载,而过程式语言 C 则不支持。函数被 C++编译后在符号库中的名字与 C 语言的不同。
因为C++编译后在符号库中的名字与函数名、函数参数数量及类型信息有关,C编译后在符号库中的名字只与函数名有关。

实例C++调用C

//ctest.c
#include "ctest.h"
 
void test(int a, double b) {
  printf("a: %d\n", a);
  printf("b: %lf\n", b);
}

头文件中的编译宏的作用是防止该头文件被重复引用。

//ctest.h
#ifndef CTEST_H
#define CTEST_H
 
#include <stdio.h>
 
void test(int, double);
 
#endif


//c++_use_c.cpp
extern "C" void test(int, double);
//extern void test(int, double);
 
int main() {
  test(2, 1.4);
  return 0;
}

注意
(1)链接指示extern "C"中的“C"代表的并不是C语言,而是用extern ”C“来声明非C++函数;实际上Fortran和汇编语言也常常使用,因为它们也正好符合C实现的约定。支持什么语言由编译器而定,C++保证支持的唯一语言是C
(2)extern ”C“必须出现在函数的第一次声明上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值