SDL:"working natively in C++"是什么意思?
SDL: What does "working natively in C++" mean?
我试图对上面的短语有一个大致的了解。我正在学习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++本机协同工作,…":http://libsdl.org/
我认为"native"这个词意味着原始环境,但我不明白为什么用C编写的东西不是用C编写,而是用C++编写的?
这个短语是否意味着它在C++中同样有效?
SDL是用C编写的,可以与C++一起使用,并且有可用于其他几种语言的绑定,包括C#和Python。
我认为你可以从这句话中去掉以下内容:
- SDL是用C编写的。因此,您可以直接从C程序中调用它
- C++"被设计为与C编译器的源代码和链接兼容">1,因此您可以在C++程序上"本机"使用SDL是很自然的,这意味着不需要翻译/编组层。您可以简单地
#include
头文件,并直接调用API - 其他语言,如C#和Python,不能以本机方式调用C API,需要对参数进行混搭。这种编组是在语言绑定中完成的
尽管这两种语言有很多相似之处,但C和C++不是同一种语言,而且在C++编译器中使用C代码时,有一些地方不会编译。
一个这样的例子是这样的:
int main()
{
void *vptr;
int *iptr = vptr;
return 0;
}
在C中,此代码将进行编译。在C++中,这是非法代码,必须重写为
int main()
{
void *vptr;
int *iptr = (int*)vptr;
return 0;
}
这个例子和许多其他例子可以在这里找到:http://www.geeksforgeeks.org/write-c-program-wont-compiler-c/
当你的Python SDL的SDK(…oy.)表明它是用C编写的,并且在C++中本地工作时,这几乎可以肯定地表明,代码中没有像我引用的这样的例子。
例如,考虑一个简单的库函数foo
,它取一个整数并返回一个整数。首先,我们可以编写一个在两种语言中都有效的头文件:
lib.h:
#ifndef H_FOO
#define H_FOO
#ifdef __cplusplus
extern "C" {
#endif
int foo(int);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // H_FOO
接下来,我们可以提供实现此功能的C代码:
lib_impl.c:
#include "foo.h"
int foo(int a) { /* ... */ };
最后,我们可以使用C++中的这个库:
app.cpp:
#include "foo.h"
struct XYZ {
XYZ(int n) : data_(foo(n)) {}
private:
int data_;
};
int main() { XYZ(10); }
在链接时,app.cpp
翻译单元中的外部符号foo
可以与从lib_impl.c
翻译单元导出的符号foo
相匹配,即使它们是从不同的语言编译的。类型int
在两种语言中都意味着"相同",因为在C++中调用值为10
的函数会导致正确的调用,就像C代码调用了参数为10
的函数一样——类型int
在两种语文中以相同的方式表示,调用约定也相同。
C和C++的这一基本方面不是任何正式标准的一部分,但实际上是普遍正确的,它是核心兼容性功能之一,允许新的C++程序在丰富的现有代码上构建,并与许多操作系统API(通常作为C API提供)"本机"交互。
类似的链接时互操作性是由许多工具链提供的,这些工具链具有以汇编方式编写的对象代码(您需要更加注意相关的调用约定),它在Fortran中也很常见(尽管您需要将C和C++基本类型与Fortran的类型相匹配)。其他较新的语言也可能提供与C的"直接"互链接性(因此,以一种迂回的方式,与C++和Fortran),或者它们可能需要一个更重库的"外部函数接口",该接口对如何命名外部语言(如Java和Go)提供的函数有点详细。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思