extern “C”
一、作用
被extern"C"修饰的代码会按照C语言的方式去编译。
例如:
//单行
extern "C" void func() {};
//多行
extern "C" {
void func() {};
void func(int a) {};
void func(int a,int b) {};
}
则函数func ( ) 将使用C语言的方式进行编译
二、使用
>由于C、C++编译规则的不同,在C、C++混合开发时,可能会经常出现以下操作。
>使用第三方框架\库,可能是用C语言写的,就需要使用extern “C”。
方法:
C++文件中存在被定义的 __cplusplus
; 通过此定义可以判定文件是否为C++,从而选择是否要包括extren “C”;
1>引用第三方库的头文件
//main.cpp文件
#include<iostream>
#include<string>
#include "other.h" //引用头文件
using namespace std;
int main(void)
{
cout << sum(10,10) << endl;
cout << delta(10, 10) << endl;
cout << divide(10, 10) << endl;
system("pause");
}
2>添加other.h文件,并定义好使用的函数,并防止文件被重复引用。
- 防止重复被包含,一般用文件名字定义,以两个下划线开头并使用大写。
//other.h头文件
//头文件定义函数
#ifndef __OTHER_H
#define __OTHER_H //防止重复被包含
#ifdef __cplusplus
extern "C" {
#endif //!__cplusplus
int sum(int v1, int v2);
int delta(int v1, int v2);
int divide(int v1, int v2);
#ifdef __cplusplus
}
#endif //!__cplusplus
#endif //!__OTHER_H
3>第三方库一般会带有一个头文件,只需引用即可,若没有则使用上述方法,当然对于不同的情况可以有不同选择
- 例如需要用C语言编译的代码比较短时,使用多行包括即可。
//other.c文件
//第三方库
#include "other.h"
int sum(int v1, int v2)
{
return v1 + v2;
}
int delta(int v1, int v2)
{
return v1 - v2;
}
int divide(int v1, int v2)
{
return v1 / v2;
}
提示:
防止重复包含也可使用#pragma once(在VS环境下),不同平台存在差异,
所以为了兼容还是选择#ifdef、#define、#endif