Могу ли я смешивать C ++ и C в одном проекте в Visual Studio? - PullRequest
15 голосов
/ 25 октября 2009

У меня есть проект Win32 DLL в VS2008, он написан на нескольких модулях C.
Поскольку я также хочу иметь возможность сборки вне VS2008, без зависимости от VS2008, я создал собственный make-файл, который выполняет все этапы сборки и компоновки. Все это настроено просто отлично.

Теперь я хотел бы добавить пару модулей C ++ в эту DLL. Я изменил пользовательский make-файл, чтобы компилировать модули .cpp как C ++, а модули .c как обычный C (/ Tc). Это все работает. Это связывает все вместе, нет проблем.

Могу ли я настроить проект VS2008 на то же самое?

Могу ли я смешать C ++ и C в одном проекте VS2008?

Или для этого нужен специальный шаг сборки?

Спасибо.


ОТВЕТ

У меня был проект VS2008 для компиляции как C. Мне нужно было изменить его на Compile As "Default" Щелкните правой кнопкой мыши проект, выберите «Свойства», а затем ...:

alt text

Спасибо, Павел.

Ответы [ 3 ]

8 голосов
/ 25 октября 2009

Прежде всего, вам даже не понадобится /Tc, если вы создаете его самостоятельно - cl.exe использует расширение файла для определения типа, поэтому файлы .c будут скомпилированы как C по умолчанию и .cppи .cxx файлы как C ++.

Для проектов VS он работает точно так же, за исключением того, что вы не можете изменить это поведение (или, по крайней мере, я не знаю как).

5 голосов
/ 25 октября 2009

Нет абсолютно никаких проблем в смешивании C и C ++ в одном проекте. Все, что вам нужно сделать, чтобы спроектировать интерфейс между модулями C и C ++ в составе функций C и структур данных C, а затем убедиться, что эти функции интерфейса объявлены на стороне C ++ со спецификатором C-linkage extern "C".

1 голос
/ 25 октября 2009

Они должны добавить нормально, учитывая, что компилятор Microsoft C скомпилирует оба. Если вы добавите их в проект, они будут переданы cl - и я считаю, cl делает выбор, какой режим использовать, основываясь на расширении файла. Вы используете .cpp, что хорошо.

Короче говоря: Да.

GCC сделает то же самое, поэтому ваш make-файл должен быть достаточно переносимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...