Подтвердить что ты не робот

Принудительный gcc компилировать файл .cpp как C

У меня есть внешний файл .cpp. Это смесь C-совместимого кода и немного С++. Код С++ - это всего лишь оболочка C, чтобы использовать возможности С++.

Он использует макросы #ifdef __cplusplus для защиты кода на С++, что отлично. К сожалению, если я пытаюсь скомпилировать gcc, он обрабатывает его как С++ из-за окончания файла. Я знаю различия между gcc и g++ - я не хочу компилировать как С++.

Есть ли способ заставить gcc обрабатывать этот файл как файл C? Я попытался использовать, например, --std=c99, но это правильно порождает ошибку, что C99 недействительна для С++.

Переименование файла в .c работает, но я хотел бы избежать этого, если это возможно, потому что он предоставлен извне, и было бы неплохо сохранить его как оригинальную копию.

Спасибо!

4b9b3361

Ответ 1

Параметр -x для gcc позволяет вам указать язык всех входных файлов, следующих за ним:

$ gcc -x c your-file-name.cpp

Если вы хотите только специальный файл для одного файла, вы можете использовать -x none, чтобы отключить специальное лечение:

$ gcc -x c your-filename.cpp -x none other-file-name.cpp

(your-filename.cpp будет скомпилирован как C, а other-file-name.cpp будет использовать расширение и скомпилировать как С++)

Ответ 2

Чтобы скомпилировать файл foo.cpp как файл C, вы можете создать новый файл с именем foo.c и поместить в него все содержимое:

#include "foo.cpp"

Теперь скомпилируйте foo.c вместо foo.cpp.

Мы использовали это, чтобы пойти другим путем (скомпилировать файл .c как С++), чтобы начать использовать функции С++ в некоторых файлах, сохраняя при этом свою историю CVS в течение десяти лет. Кроме того, мы строим с использованием собственного компилятора платформы, а не только GCC, поэтому нам не нужно было найти эквивалентную команду -x для полдюжины компиляторов, а затем заставить нашу систему сборки применять эту команду только к определенным файлам.