Если вы скомпилируете код с помощью компилятора C++, то этот код по определению является кодом C++, а не C, даже если он также действителен C-кодом.
Некоторый допустимый код C недопустим. Код C++, особенно применимый к конкретным функциям C99, и некоторый код, который действителен в обоих случаях, может иметь слегка отличную семантику - например, значение const
. Однако в большинстве случаев это будет мало или совсем не отличается от сгенерированного кода или его производительности.
Обычно вы не видите реалистично измеримой разницы в производительности между компиляцией C и C++ одного и того же кода с использованием одного и того же набора компиляторов. C++ имеет немного отличающийся запуск во время выполнения, при котором он должен вызывать конструкторы для глобальных статических объектов перед main(); однако, если ваш C++-код также действителен C, конструкторов не будет, поэтому никаких накладных расходов.
C++ имеет более строгие требования к типовому соглашению и более высокую проверку ошибок - это несколько менее разрешительно в отношении действительного кода; обычно, если ваш C-код компилируется как C++ без ошибок или предупреждений, то это, вероятно, лучший/чистый код. Есть некоторые исключения, например, в C, как правило, discouraged from explicitly casting the return from malloc()
, но на C++ выбора нет, и поскольку неявные декларации функций не требуются, аргумент для того, чтобы этого не делать в C, не выполняется. Таким образом, в этом случае, чтобы сделать ваш C-код действительным C++, вам придется написать его таким образом, что, хотя он действителен на C, некоторые могут считать плохую практику. Лично, если вы подавляете или игнорируете предупреждения компилятора C о пропавших прототипах, вы, вероятно, получаете то, что заслуживаете в любом случае, поэтому я бы сказал, что в любом случае я буду писать ваш код C для совместимости с C++.
В отношении оптимизации, когда используется один и тот же набор компиляторов, оптимизация в компиляторе C, вероятно, идентична оптимизации в компиляторе C++, за исключением, возможно, нескольких случаев, когда точная семантика отличается.
Кроме того, чтобы использовать код C++, который является допустимым, C должен пропустить многие из преимуществ C++. Скорее, многие специальные функции C++ доступны для вас при минимальных затратах времени или без них. Некоторые функции, с другой стороны, относительно дороги - убедитесь, что знаете, какие из них жизнеспособны в вашей конкретной цели и приложении перед их использованием. Я перечислил некоторые ресурсы, которые могут помочь с этим в another question.
В основном, компиляторы сначала ** переводят код на свой промежуточный язык ** и рядом с машинным кодом, так что в, например, GCC, существуют те же оптимизации, что и для C и C++. Зачем использовать компилятор C++ для кода C? –
Да нет смысла использовать C++-компилятор для кода C. Но я просто хотел знать, будет ли gcc и g ++ на точно таком же коде выдавать тот же эффективный код, который можно использовать в среде, такой как встроенное программирование. – Dexters
Нет причин ожидать, что что-то станет более эффективным только потому, что вы написали его на C. Возможно, на самом деле меньше того, что C++ сделает, это должно быть сделано вручную на C, и, следовательно, есть еще больше возможностей для того, чтобы испортить. –