将C ++变量从类传递给C函数

时间:2013-07-08 09:53:01

标签: c++ c pointers

假设我有以下代码,是否可以这样做? 我的意思是将一个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;
}

2 个答案:

答案 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代码中)。