让我说我用C编写了一个程序并用gcc和g ++编译它,编译运行得更快?gcc还是g ++?我认为g ++编译会使它变慢,但不确定.
让我再次澄清我的问题,因为有关gcc的说法.
假设我在控制台上编译这样的程序.
gcc a.c
g++ a.c
Run Code Online (Sandbox Code Playgroud)
哪个a.out运行得更快?
Mat*_*ery 26
首先:问题(以及其他一些答案)似乎是基于错误的前提,即C是C++的严格子集,实际上并非如此.编译C和C++是不一样的编译它为C:它可以改变你的程序的意义!
C将主要编译为C++,并且大多数会给出相同的结果,但是有一些事情被明确定义为给出不同的行为.
这是一个简单的例子 - 如果这是你的a.c:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('x'));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后编译为C将给出一个结果:
$ gcc a.c
$ ./a.out
4
Run Code Online (Sandbox Code Playgroud)
和编译为C++将给予不同的结果(除非您使用的是不同寻常的平台,在这里int和char大小相同):
$ g++ a.c
$ ./a.out
1
Run Code Online (Sandbox Code Playgroud)
因为C规范定义了一个具有类型的字符文字int,而C++规范将它定义为具有类型char.
其次:gcc和g++是不是"相同的编译器".使用相同的后端代码,但C和C++前端是不同的代码段(gcc/c-*.c并且gcc/cp/*.c在gcc源代码中).
即使您坚持使用被定义为执行相同操作的语言部分,也无法保证C++前端将以与C前端完全相同的方式解析代码(即,给出完全相同的输入后端),因此无法保证生成的代码是相同的.所以它肯定是有可能的是一个可能发生在某些情况下产生比其他更快的代码-尽管我可以想象你需要复杂的代码有找到一个差异,因为大多数的优化和代码生成魔术发生的任何机会在编译器的公共后端; 而差异可能是圆的.