是否可以将C ++与任何语言结合起来?

时间:2017-07-29 23:40:47

标签: c++ c++11

我从一本书(专业C ++版2)中听到,使用extern可以将C ++与多种语言结合起来,接近所有语言。例如:

extern "Lua" {
     //Some code in Lua
};

extern "Python" {
     //Some code in Python
};

extern "C" {
     //Some code in C
};

int main(int argc, char* argv[]){
     //Some C++ code
     return 0;
}

现在我知道你可以将C和ASM与C ++结合起来,但正如我之前所说,我们可以使用更多其他语言,如Lua,Python,PHP等吗?或者它只适用于依赖于C / C ++的语言?

1 个答案:

答案 0 :(得分:2)

我真的没有资格回答这个问题,但我会尽我所能。

根据extern的文档,它提供了用不同编程语言编写的模块之间的链接。

  

语言链接封装了与用另一种编程语言编写的模块链接所需的一组要求:调用约定,名称修改算法等。

这可能导致人们相信,正如本书所声称的那样,可以使用extern将C ++与许多其他语言结合起来。事实并非如此。编译器只支持“C”和“C ++”。 “C ++”是默认值,“C”用于

  

链接用C编程语言编写的函数,并在C ++程序中定义可以用C语言编写的模块调用的函数。

这是因为C ++是C的近亲,大多数C ++编译器都知道如何编译C代码。 (实际上比这更复杂,请参阅thisthis)您也可以embed assembly in C++,尽管不是以便携式方式。

现在这并不意味着其他语言不能与C ++结合使用。例如,您可以扩展python,您可以在其中加载用C ++编写的模块,并且可以将python嵌入到C ++中,其中C ++程序将Python解释器作为soubroutine调用。见Boost Python。同样,您可以embedd Lua in C++,我相信可以嵌入许多其他脚本语言。关键是它比仅使用externcomplicated,您需要用于特定目的的库,并且嵌入每种不同的语言都有其独特的复杂性。

至于为什么这本书提出了这样的主张,也许你误解了它,因为人们可能误解了上面的文档片段?在任何情况下,任何能够在这个问题上留下任何歧义的C ++书都可能不是一本好书。在你阅读The Definitive C++ Book Guide and List中的所有内容之前,我很难想象你应该阅读任何其他C ++书籍。