Po pierwsze: Pytanie (i niektórych innych odpowiedzi) wydają się być oparte na błędne założenie, że C jest ścisłym podzbiorem C++, co w rzeczywistości nie ma miejsca. Kompilowanie C jako C++ to , a nie to samo, co kompilowanie go jako C: może zmienić znaczenie twojego programu!
C będzie najczęściej kompilowany jako C++, a większość da takie same wyniki, ale są pewne rzeczy, które są jawnie zdefiniowane, aby nadać inne zachowanie.
Oto prosty przykład - jeśli to jest twój a.c
:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('x'));
return 0;
}
następnie kompilacji jak C daje jeden wynik:
$ gcc a.c
$ ./a.out
4
i kompilacji jak C++ da inny wynik (chyba, że używa się nietypowej platformy, na której int
i char
są tego samego rozmiaru):
$ g++ a.c
$ ./a.out
1
ponieważ specyfikacja C definiuje literał znaków, który ma typ int
, a specyfikacja C++ definiuje go jako typ char
.
Po drugie: gcc
i g++
nie są "tym samym kompilatorem". Używany jest ten sam kod końca, ale przednie końcówki C i C++ to różne fragmenty kodu (gcc/c-*.c
i gcc/cp/*.c
w źródle gcc).
Nawet jeśli przylgniesz do części języka, które są zdefiniowane do robienia tego samego, nie ma gwarancji, że interfejs frontowy C++ przeanalizuje kod dokładnie w ten sam sposób, co przedni koniec C (np. ten sam sygnał wejściowy do zaplecza), a zatem brak gwarancji, że wygenerowany kod będzie identyczny. Tak więc z pewnością możliwe jest wygenerowanie szybszego kodu niż w niektórych przypadkach - chociaż wyobrażam sobie, że potrzebujesz złożonego kodu, aby mieć jakąkolwiek szansę na znalezienie różnicy, ponieważ większość optymalizacji i generowania kodu magia dzieje się na wspólnym zapleczu kompilatora; a różnica może być różna.
Być może zainteresuje Cię http://shootout.alioth.debian.org/u32q/c.php Który porównuje wiele języków prowadzących podobne programy. Okazuje się, że jest kilka rzeczy, z których C jest szybsze, a niektóre z C++ są szybsze, ale różnice są niewielkie. – jsl4tv