Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C++;C项目中的文件 只是出于好奇:C项目中有没有使用C++文件的方法?“文件”是指从头文件和库中访问函数并在已经解决的问题中使用它们的能力。 < P>是的,如果你小心,可以混合C和C++。具体细节将取决于您使用的编译器等 在C++的FAQ中有一章:最简单的方法就是用C++编译器编译C文件。绝大多数代码都是兼容的,如果使用Exp/P>,可以将函数、变量和结构外部化,则可以使用C++标题。 extern "C" { int global; }_C++_C - Fatal编程技术网

使用C++;C项目中的文件 只是出于好奇:C项目中有没有使用C++文件的方法?“文件”是指从头文件和库中访问函数并在已经解决的问题中使用它们的能力。 < P>是的,如果你小心,可以混合C和C++。具体细节将取决于您使用的编译器等 在C++的FAQ中有一章:最简单的方法就是用C++编译器编译C文件。绝大多数代码都是兼容的,如果使用Exp/P>,可以将函数、变量和结构外部化,则可以使用C++标题。 extern "C" { int global; }

使用C++;C项目中的文件 只是出于好奇:C项目中有没有使用C++文件的方法?“文件”是指从头文件和库中访问函数并在已经解决的问题中使用它们的能力。 < P>是的,如果你小心,可以混合C和C++。具体细节将取决于您使用的编译器等 在C++的FAQ中有一章:最简单的方法就是用C++编译器编译C文件。绝大多数代码都是兼容的,如果使用Exp/P>,可以将函数、变量和结构外部化,则可以使用C++标题。 extern "C" { int global; },c++,c,C++,C,在头文件中,使用 extern "C" int global = 20; 在C++代码中,它可以从C代码中使用。同样的规则也适用于函数 您甚至可以使用适当的原型调用方法。例如: class C { public: c(int); int get(); }; .cpp中的C-Wrapper可能如下所示: extern "C" void * createC(int i) { return (void *) new C(i); } extern "C" int

在头文件中,使用

extern "C" int global = 20; 
<>在C++代码中,它可以从C代码中使用。同样的规则也适用于函数

您甚至可以使用适当的原型调用方法。例如:

class C 
{
public: 
     c(int);
     int get();
};
.cpp中的C-Wrapper可能如下所示:

extern "C" void * createC(int i)
{
     return (void *) new C(i);
}

extern "C" int Cget(void *o)
{ 
     return ((C *)o)->get();
}

是否可以选择相反的方式?C++代码可以直接包含C头文件和C语言库链接(C代码通常可以被编译为C++,很少或没有更改),但是使用C++的C++需要多一点的关注。

不能从C文件中包含C++头,并期望将其编译为C.< /P>


<> P>所以你必须做的是从C++代码中公开一个C兼容接口(一个头,里面所有的东西都被封装在代码>外部的“C”<代码>中,并且没有使用C++特定的特性。如果你有这样的标题,你可以简单地从C代码中包含它,并链接到C++库。

< P>如果你为C++库提供了一个C API,那么你可以使用它。简单地定义一个单独的头中的C API(你不能使用C文件中的C++代码头)。ICU项目就是这样做的,它在内部使用C++,但同时提供C和C++ API。

也见。这可能不是OP喜欢的方法,但我看不出答案中有任何不正确的地方,也没有绝对不好的建议。我想没有,但我们这些喜欢C的人发现“将其编译为C++”的解决方案被提得太快,然后被批评为C风格。让两种语言之间日益减少的兼容性成为现实吧。这两种语言是不同的,不应该假装不同。你的个人语言偏好不应该是一个理由去投票,认为其他语言是优越的答案。