我不确定C中的编程真正意味着什么: - 使用C编译器在纯C中编程或使用C++编译器在C中编程.
除了C的C语法和C语言的C++语法之间的差异之外,我可以肯定地说,在性能方面,两个可执行文件之间绝对存在差异(或者极少数情况下)吗?
我正在考虑这个问题,因为在游戏编程中,每个渲染部分,游戏对象部分和游戏脚本部分都可以编程完全不同的语言,以获得执行速度和易于开发之间的最佳折衷,在每一部分.
部件之间的这种分离对我来说很重要,例如,我想制作一个多功能的3D冒险引擎,社区可以制作自己的游戏玩法而不必乱用引擎.它只能制作具有单个角色和几个敌人的游戏,因此将涵盖不同的游戏类型:黑客和斜线,渗透,角色扮演,平台等.
我应该把这两段放在gamedev.stackexchange中,但第一部分只是关于语言......
alt*_*ive 30
有很多次要的挑剔.让我觉得最明显的是,在C++中,你必须抛出返回值malloc.结构也是在C++中自动进行类型化的.
始终将C编译器用于C代码,而不是C++.C++与C不完全兼容.
其他几个:
void func();声明一个没有指定其参数是什么的函数,而在C++中,void func();它等同于C void func(void)',不带参数;'a')int在C和charC++中;char []C和const char []C++;class是C++中的保留关键字.对于那些不相信我并且正在贬低的人,请查看以下C代码:
#include <stdlib.h>
int main(int argc, char **argv) {
int *i = malloc(sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译gcc很好,但编译下g++给出以下错误:
test.c: In function `int main(int, char**)':
test.c:4: error: invalid conversion from `void*' to `int*'
Run Code Online (Sandbox Code Playgroud)
注意:C和C++语法之间的差异已经在其他帖子中描述了......但是,有些事情让我感到困扰,足以提示以下答案:
如果我理解正确,你想在程序中有两个独立的部分,一个在C中,一个在C++中.一个人认为应该非常快,而另一个可能会更慢.
在当前的情况下(比较C和C++性能),如果使用C和C++编译器编译相同的C代码,则没有明显的区别......
当然,永远不要低估程序员的技能对于程序的执行是否重要,无论语言如何.
void *同类代码更快,更安全).void *等).事实上,上面的"小细节"被认为是危险的,这就是它们在C++编译器上产生错误或警告的原因.extern "c"符.void *(请注意,这不应该在C++中经常发生,甚至根本不会发生,因此与潜在的转换错误相比,这是一个可以忽略不计的问题)通过C/C++,我的意思是C和C++编译器都能正确理解的代码.虽然您选择的语言可能会有所不同,但那些兼容的C/C++标题将是相同的(即使您使用C++编写代码并为代码的C++用户提供额外的C++标头)
extern "C"包装的说明符装饰你的函数声明#ifdef __cpluplus.这将确保C++编译器知道这些函数被导出为C函数namespace或class或者template是一个坏主意)extern "C"包装的说明符来装饰你的函数声明#ifdef __cpluplus.这将确保C++编译器知道这些函数将作为C函数导出我发现以下页面非常有趣,因为它列出了C(包括C99)和C++之间的差异:
http://david.tribble.com/text/cdiffs.htm
至于C++中缺少的C99功能,你可以阅读我对问题的答案c可以做什么而不是c ++?:我描述了C++功能,可以轻松替换那些C99功能.
无论如何,如果C++被认为对F-35而言足够快且足够强大,那么它应该足够你了.
由于程序员的可用性,F-35的大部分软件都是用C和C++编写的; Ada83代码也可以从F-22中重复使用.
来源:维基百科:https://en.wikipedia.org/wiki/Lockheed_Martin_F-35_Lightning_II
所以,如果你需要选择,那么选择你的语言是因为你喜欢它,或者因为一个是另一个没有的.但不是因为假设的性能差异.