我想对上面这句话有个大概的理解。我在学习PyGame,遇到了SDL(简单的DirectMedia层)参考。在
从PyGame引用SDL:“PyGame是一个针对SDL的python包装器,由Pete Shinners编写。”http://www.pygame.org/docs/tut/newbieguide.html
我查阅了SDL(上面的URL中的SDL链接[单击SDL]),并进入“SDL是用C编写的,用C++来工作,……”这里:^ {A2}
我已经考虑了“原生”这个词暗示了原始环境,但我不明白为什么C写的东西不是C++中的原生而是C++中的原生?在
这个短语是否意味着它在C++中也一样有效?在
其中一个例子如下:
在C语言中,这段代码将被编译。在C++中,这是非法代码,必须改写为
^{pr2}$这个例子和其他许多例子都可以在这里找到:http://www.geeksforgeeks.org/write-c-program-wont-compiler-c/
当你的pythonsdl的SDK(。。。Oy)表示它是用C编写的,并且在C++中是正常工作的,这几乎可以肯定地表明,在代码中没有像我所引用的例子。在
C++和C在编程语言方面享有特别好的链接时间关系。任何一种语言编写的函数都可以从另一种语言的代码中调用(只要所有代码都是用一致的工具链编译的),而且这两种语言共享一组“意思相同”的通用基本类型。在
为了举例说明,考虑一个简单的库函数
foo
取一个整数并返回一个整数。首先,我们可以编写两种语言都有效的头文件:接下来,我们可以提供实现这个函数的C代码:
lib\u impl.c:
^{pr2}$ 最后,我们可以从C++中使用这个库:附录cpp:
在链接时,}翻译单元的导出符号
<>这个C和C++的基本方面,它不是任何形式的标准,但实际上是普遍的,是核心的兼容性特征之一,它允许新的C++程序在大量的现有代码上建立,并且与许多操作系统API(通常提供为C API)交互地“原生”地交互。在app.cpp
翻译单元中的外部符号foo
可以与来自{foo
匹配,即使它们是从不同的语言编译的。两种语言中的类型{{CD6}}意思是“相同”,在这一意义上,调用C++中的函数^ {< CD7> }导致正确调用,就像C代码调用了具有参数^ {< CD7> }的函数。类型^ {< CD6> }以相同的方式表示,并且调用约定在两种语言中都是相同的。在类似的链接时间互操作由许多工具链提供,其中目标代码是在汇编中编写的(在这里你需要更密切地关注相关的调用约定),并且它也与FORTRAN(通常需要用Fortran的类型匹配C和C++基本类型)。其他的,最近的语言也可以提供与C(直接,用C++和FORTRAN的迂回方式)的“直接”的跨链接性,或者,否则它们可能需要一个更重的库“外部功能接口”,这是关于它如何指定由外语提供的功能(例如java和go)更冗长的。在
我想你可以从这个声明中去掉以下内容:
#include
头文件,并直接调用api。在相关问题 更多 >
编程相关推荐