Можно ли смешивать С++ и 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 файл должен быть достаточно переносимым.