Можно ли смешивать С++ и C в одном проекте в Visual Studio?

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

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

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

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

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

Благодарю.


ОТВЕТ

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

alt text

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

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Короче: Да.

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