1、关键词: #ifdef __cplusplus
#ifdefined(__cplusplus) //跨平台定义方法
extern "C"{
#endif
//... 正常的声明段
#ifdefined(__cplusplus)
}
#endif
解释:第一行与第三行对应,第五行和第七行对应,也就是{},为什么要用{}呢,就是为了作用的多一点吧,如果没有{},那extern c 只修饰后面的一个句子
2、在ROS环境中C++调用C函数
这里的参考原文是:原链接
- 首先在c源文件及其关联的头文件放置在ros软件包目录下
- 在cpp文件中,使用 extern "C"关键字
- 然后在需要调用c函数的地方,直接调用即可
-
#ifdef __cplusplus extern "C"{ #endif //此处包含要调用c函数的头文件 #ifdef __cplusplus } #endif
修改CMakefile.txt文件
-
修改该上级目录的CMakefile.txt文件
- 首先在add_executable(我的节点名 src/节点文件.cpp src/添加的c文件.c)
- 然后添加add_definitions(-std=c99) 重新 catkin_make 即可.
3、例子
main.cpp
#include <stdio.h>
using namespace std;
#include<iostream>
#ifdef __cplusplus
extern "C"{
#endif
#include "add.h"
int add(int a,int b);
#ifdef __cplusplus
}
#endif
int main(int argc,char *argv[])
{
int c = add(2, 8);
cout<<c<<endl;
return 0;
}
add.c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
add.h
#ifndef __ADD_H__
#define __ADD_H__
int add(int, int);
#endif
/* __ADD_H__ */
然后在修改CMakelist文件,就可以运行了