0

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

2 回答 2

3

从技术上讲,这可以编译(好吧,在修复了已经指出的各种语法问题之后),但是您必须小心。您需要确保所有内容都可以链接(即为 C 和 C++ 源代码正确创建符号);我通常使用 g++ 作为编译器,对于 C 文件,它可以正常工作。其次,您必须确保告诉您的 C++ 代码您要引用 C 代码。因此,在您要添加的“cfile.h”中

#ifdef __clpusplus
extern "C" {
#endif

 // your C include file

#ifdef __cpluspus
}
#endif

这确保您可以将 C 包含文件包含到 C++ 源代码中,同时告诉 C++ 编译器在编译代码时使用 C 样式名称修饰。然后继续编译 C 和 C++ 文件,并将它们链接到可执行文件中:

g++ -g -O0 -o test main.cpp cfile.c

这里有更多相关信息:结合 C++ 和 C - #ifdef __cplusplus 如何工作?

于 2013-07-08T10:04:10.237 回答
1

如果您提供您正在尝试做的事情的实际样本会更好。正如其他人指出的那样,您提供的代码存在许多语法问题,并且在 C 和 C++ 之间传递基本类型几乎从来都不是问题。int 到处都是 int (只要您不跨越 32/64 位边界)。

您可能遇到麻烦的地方是从另一端调用 C/C++ 函数/方法或传递类(使用指针并且通常只在 C 代码中传递它们)。

于 2013-07-08T10:10:32.950 回答