当前位置:首页>Linux>linux下c和c++混和编程的方法

linux下c和c++混和编程的方法

  • 2026-09-08 07:24:25
linux下c和c++混和编程的方法

cpputest单元测试工具是由c++编写,用于c/c++单元测试,当对c进行单元测试时,涉及到混合编程。本文主要介绍c和c++混合编程的方法。

1. extern "C"

  • • extern "C"是C++特性,C编译器不识别。
  • • 核心作用是让C++编译器按照C语言的规则编译和链接被它包裹的代码。解决混合编程时的链接兼容性问题。
  • • extern "C"只能修饰函数和函数指针,不能修饰类、模板、重载函数。
  • • 在c文件中使用的话必须用__cplusplus宏做条件编译。

2. __cplusplus宏

  • • __cplusplus是C++编译器预定义的宏,用来区分C/C++编译环境,C编译器不会定义它;
  • • 核心用途是编写兼容C/C++的代码,如搭配extern "C"使用。

例如下面的头文件既能被C编译器编译,也能被C++编译器编译:

// common.h#ifndef __COMMON_H__#define __COMMON_H__#ifdef __cplusplusextern "C" {  // 开启 C 链接规则#endif// 声明函数(C/C++ 均可调用)int add(int a, int b);#ifdef __cplusplus}  // 闭合 extern "C"#endif#endif
  • • 用C++编译器编译时,__cplusplus存在,extern "C"生效,函数按C 规则链接;
  • • 用C编译器编译时,__cplusplus不存在,extern "C"被跳过,避免C编译器识别不了这个C++特性而报错。

3. c++中调用c函数的例子

// add.c#include <stdio.h>#include "add.h"int add(int a, int b){  printf("a + b = %d", a + b);  return a + b;}// add.h#ifndef __ADD_H__#define __ADD_H__int add(int a, int b);#endif

在main.cpp中使用extern "C" 声明c函数。

// main.cpp// 告诉 C++ 编译器:这个头文件中包含的函数按 C 规则链接extern "C" {#include "add.h"}int main(){  int num = add(1, 2);  return 0;}

编译和链接main.cpp和add.c

gcc -Wall -c add.cg++ -Wall -c main.cppg++ main.o add.o -o test

4. 头文件兼容 C/C++ 编译的例子

只需将main.cpp中的extern "C"去除,然后放在add.h中,同时使用__cplusplus宏包裹即可。

// add.h#ifndef __ADD_H__#define __ADD_H__#ifdef __cplusplusextern "C" {#endifint add(int a, int b);#ifdef __cplusplus}#endif#endif

最新文章

随机文章