c/c++混合编程

来源:百度知道 编辑:UC知道 时间:2024/05/04 10:05:01
rt_logging.h文件里声明C函数extern const char_T *rt_UpdateTXYLogVars(RTWLogInfo *li,
time_T *tPtr) ;
在另一个CPP文件里想调用此函数首先
extern "C"{

#include "rt_logging.h"

}
然后 声明extern "C"{

extern const char_T *rt_UpdateTXYLogVars(RTWLogInfo *li,time_T *tPtr) ;
}
但是出现了error C2732: linkage specification contradicts earlier specification for 'rt_UpdateTXYLogVars'
什么原因啊 急

把后面那一半删了应该就好了吧

extern "C" int func(); //声明fun为外部的C函数
经过的声明处理,编译器就知道这个函数必须按照C语言的方式调用,从而为其生成相应的目标代码。如果有很多,就一起去声明:
extern "C" {
int func();
void func2(int ,int);
}
如果编程时间足够长,换句话说,就是经验足够丰富,就应该知道模块函数的接口通常都是放到头文件中去声明,这样就可以保证供多个源文件引用。那新的问题又来了,如果一个头文件既被C++源文件引用又被C源文件引用,则上述声明就出现了问题,因为C编译器不认识extern后的字符串 C。解决这个问题的方法就是在头文件加入如下代码,使之对C和C++编译器通用:
#ifdef __cplusplus
extern "C" { //C编译器看不到这一行
#endif
int func1();
void func2(int ,int);
#ifdef __cplusplus
} //C编译器看不到这一行
#endif
这里用到一个宏定义__cplusplus,如果是通过C编译器进行预处理,则它没有定义。只有用C++编译器进行预处理,则它有定义。这样就可以把代码分为两种情况进行编译,从而实现对C和C++编译器的通用性。

rt_logging.h文件里声明C函数extern const char_T *rt_UpdateTXYLogVars(RTWLogInfo *li,
time_T *tPtr) ;
在另一个CPP文件里想调用此函数首先
extern "C"{

#include "rt_logging.h"

}
然后
直接在C++文件中用就可以了, r