Во-первых: вопрос (и некоторые другие ответы), кажется, основаны на ошибочной предпосылке, что C является строгим подмножеством C ++, что на самом деле не так.Компиляция C как C ++ не такая же, как компиляция его как C: это может изменить смысл вашей программы!
C будет в основном компилироваться как C ++ и в основном даст те же результаты,но есть некоторые вещи, которые явно определены , чтобы дать другое поведение.
Вот простой пример - если это ваш a.c
:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('x'));
return 0;
}
, то компиляциякак C даст один результат:
$ gcc a.c
$ ./a.out
4
, а компиляция как C ++ даст другой результат (если вы не используете необычную платформу, где int
и char
имеют одинаковый размер):
$ g++ a.c
$ ./a.out
1
, поскольку спецификация C определяет символьный литерал для типа int
, а спецификация C ++ определяет его для типа char
.
Во-вторых: gcc
и g++
не "тот же компилятор".Используется один и тот же внутренний код, но внешние интерфейсы C и C ++ - это разные куски кода (gcc/c-*.c
и gcc/cp/*.c
в исходном коде gcc).
Даже если вы придерживаетесь частей языкакоторые определены, чтобы делать то же самое, нет никакой гарантии, что внешний интерфейс C ++ будет анализировать код точно так же, как внешний интерфейс C (т. е. дает точно такой же ввод для внутреннего интерфейса), и, следовательно, нет никакой гарантии, чтосгенерированный код будет идентичным.Так что, безусловно, возможно , что в некоторых случаях один может генерировать более быстрый код, чем другой - хотя я мог бы подумать, что вам понадобится сложный код, чтобы иметь какой-либо шанс найти разницу, так как большинствомагия оптимизации и генерации кода происходит в общем бэкэнде компилятора;и разница может быть в любую сторону.