Заставить gcc скомпилировать файл .cpp как C - PullRequest
35 голосов
/ 18 ноября 2010

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

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

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

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

Спасибо!

Ответы [ 2 ]

57 голосов
/ 18 ноября 2010

Опция -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 будет использовать расширение и скомпилировать как C ++)

12 голосов
/ 18 ноября 2010

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

#include "foo.cpp"

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

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

...