Принудительный gcc компилировать файл .cpp как C
У меня есть внешний файл .cpp. Это смесь C-совместимого кода и немного С++. Код С++ - это всего лишь оболочка C, чтобы использовать возможности С++.
Он использует макросы #ifdef __cplusplus
для защиты кода на С++, что отлично. К сожалению, если я пытаюсь скомпилировать gcc, он обрабатывает его как С++ из-за окончания файла. Я знаю различия между gcc и g++ - я не хочу компилировать как С++.
Есть ли способ заставить gcc обрабатывать этот файл как файл C? Я попытался использовать, например, --std=c99
, но это правильно порождает ошибку, что C99 недействительна для С++.
Переименование файла в .c работает, но я хотел бы избежать этого, если это возможно, потому что он предоставлен извне, и было бы неплохо сохранить его как оригинальную копию.
Спасибо!
Ответы
Ответ 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
для полдюжины компиляторов, а затем заставить нашу систему сборки применять эту команду только к определенным файлам.