En primer lugar: la cuestión (y algunas de las otras respuestas) parecen estar basadas en la premisa errónea de que C es un subconjunto estricto de C++, que de hecho no es el caso. La compilación de C como C++ es y no lo mismo que compilarlo como C: ¡puede cambiar el significado de su programa!
C compilará en su mayoría como C++, y en su mayoría dará los mismos resultados, pero hay algunas cosas que son explícitamente definidas para dar un comportamiento diferente.
Aquí está un ejemplo sencillo - si este es su a.c
:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('x'));
return 0;
}
continuación, compilar como C dará un resultado:
$ gcc a.c
$ ./a.out
4
y compilar como C++ dará un resultado diferente (a menos que está utilizando una plataforma inusual donde int
y char
tienen el mismo tamaño):
$ g++ a.c
$ ./a.out
1
porque la especificación C define un carácter literal para tener el tipo int
, y la especificación C++ lo define como de tipo char
.
En segundo lugar: gcc
y g++
no son "el mismo compilador". Se usa el mismo código de fondo, pero los frontales C y C++ son diferentes piezas de código (gcc/c-*.c
y gcc/cp/*.c
en la fuente de gcc).
Incluso si se apega a las partes del lenguaje que están definidas para hacer lo mismo, no hay garantía de que la interfaz C++ analizará el código exactamente de la misma manera que la interfaz C (es decir, dando exactamente la misma entrada al back end), y por lo tanto no hay garantía de que el código generado sea idéntico. Por lo tanto, es posible que uno podría generar código más rápido que el otro en algunos casos, aunque me imagino que necesitaría código complejo para tener alguna posibilidad de encontrar una diferencia, ya que la mayor parte de la optimización y la generación de código la magia ocurre en el back-end común del compilador; y la diferencia podría ser en cualquier sentido.
Puede que le interese consultar http://shootout.alioth.debian.org/u32q/c.php que compara muchos idiomas que ejecutan programas similares. Resulta que hay algunas cosas en las que C es más rápido y algo de C++ es más rápido en, pero las diferencias son bastante menores. – jsl4tv