In primo luogo: la questione (e alcune delle altre risposte) sembrano essere basata su la premessa errata secondo cui C è un sottoinsieme rigoroso di C++, che in realtà non è il caso. Compilare C come C++ è non come compilarlo come C: può cambiare il significato del tuo programma!
C verrà principalmente compilato come C++, e per lo più darà gli stessi risultati, ma ci sono alcune cose che sono definite esplicitamente per dare un comportamento diverso.
Ecco un semplice esempio - se questa è la a.c
:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('x'));
return 0;
}
poi la compilazione di C darà un risultato:
$ gcc a.c
$ ./a.out
4
e la compilazione di C++ darà un risultato diverso (a meno che non Stai usando una piattaforma insolita dove int
e char
hanno le stesse dimensioni):
$ g++ a.c
$ ./a.out
1
poiché la specifica C definisce un carattere letterale per il tipo int
e la specifica C++ definisce il tipo char
.
In secondo luogo: gcc
e g++
non sono "lo stesso compilatore". Viene utilizzato lo stesso codice di back-end, ma i front end C e C++ sono pezzi di codice diversi (gcc/c-*.c
e gcc/cp/*.c
nella sorgente gcc).
Anche se ci si attiene alle parti del linguaggio definite per fare la stessa cosa, non è garantito che il front-end C++ analizzerà il codice esattamente nello stesso modo del front-end C (es. lo stesso input per il back-end), e quindi non garantisce che il codice generato sarà identico. Quindi è certamente possibile che si potrebbe generare codice più veloce dell'altro in alcuni casi - anche se immagino che avresti bisogno di codice complesso per avere qualche possibilità di trovare una differenza, come la maggior parte dell'ottimizzazione e della generazione del codice la magia avviene nel back-end comune del compilatore; e la differenza potrebbe essere in entrambi i modi.
fonte
2010-07-22 00:12:18
Potresti essere interessato a http://shootout.alioth.debian.org/u32q/c.php Confronto tra molte lingue che eseguono programmi simili. Risulta che ci sono alcune cose in cui C è più veloce e qualche C++ è più veloce, ma le differenze sono piuttosto ridotte. – jsl4tv