假设我有以下代码,是否可以这样做? 我的意思是将一个c ++对象内的变量传递给一个函数。
在foo.hpp
class foo
{
public :
int a;
}
在main.cpp
中#include "cfile.h"
#include "foo.hpp"
void main()
{
foo * fooPtr = new foo();
int RetVal = MyCfunc(fooPtr->a);
}
在cfile.c中
#include "cfile.h"
int MyCfunc(int var)
{
var + = 1;
return var;
}
答案 0 :(得分:3)
从技术上讲,这是编译的(好吧,在修复了已经指出的各种语法问题之后),但你必须要小心。您需要确保所有内容都可以链接(即为C和C ++源代码正确创建符号);我通常使用g ++作为编译器,对于C文件,它可以正常工作。其次,您必须确保告诉您的C ++代码您想要引用C代码。因此,在“cfile.h”中要添加
#ifdef __clpusplus
extern "C" {
#endif
// your C include file
#ifdef __cpluspus
}
#endif
这确保您可以将C include文件包含到C ++源代码中,同时告诉C ++编译器在编译代码时使用C样式名称修改。然后继续使用C和C ++文件进行编译,并将它们链接到可执行文件中:
g++ -g -O0 -o test main.cpp cfile.c
此处有更多相关内容:Combining C++ and C - how does #ifdef __cplusplus work?
答案 1 :(得分:1)
如果你提供了你想要做的实际样本会更好。正如其他人所指出的,您提供的代码存在许多语法问题,并在C& C之间传递基本类型。 C ++ 主要是从来都不是问题。 int到处都是一个int(只要你没有跨越32/64位边界)。
你可能遇到麻烦的地方是从另一端调用C / C ++函数/方法或传递类(使用指针并且只传递它们,通常是在C代码中)。