Обеспечение VS 2008 рассматривает мой проект как C ++, а не C ++ / CLI - PullRequest
2 голосов
/ 14 июня 2011

Я работаю в Visual Studio 2008 с собственным C ++.

Коллега написал библиотеку, и он назвал один из своих классов interface.Вот конструктор:

template <typename DtedInterface>
interface<DtedInterface>::interface (
    std::string const& tleFile,
    std::string const& dtedDir,
    dted::DtedLevel const& dtedLevel,
    double sw_latitude,
    double sw_longitude,
    unsigned int rows,
    unsigned int columns )
    : m_impl ( new interface_impl<DtedInterface> ( theFile, dtedDir, dtedLevel, sw_latitude, sw_longitude, rows, columns ) )
  {}

Меня беспокоит то, что Visual Studio 2008 выделяет слово interface в качестве ключевого слова;interface - это ключевое слово в C ++ / CLI, но не в C ++.Это не похоже на то, что это будет действительный C ++ / CLI, но это хорошо для нативного C ++.

Все выглядит так, как будто они хорошо компилируются, но как мне убедиться, что Visual Studio интерпретирует это как C ++, а неC ++ / CLI?На некотором уровне кажется, что VS рассматривает это как C ++ / CLI.Это просто настройка подсветки ключевых слов?

Ответы [ 3 ]

7 голосов
/ 14 июня 2011

Visual Studio IDE и компилятор Visual C ++ являются двумя отдельными объектами.В частности, это два отдельных исполняемых файла (devenv.exe для IDE и cl.exe для компилятора), которые выполняются как отдельные процессы.В среде IDE просто запускается процесс cl.exe для выполнения фактической компиляции.

В среде IDE где-то есть список ключевых слов, который просто сообщает текстовому редактору, какие слова нужно выделить.Это не супер сложно;это не должно быть.Последнее слово принадлежит компилятору, а не подсветке синтаксиса (или Intellisense в этом отношении).

Пока переключатель /clr не передается процессу cl.exe,компилятор скомпилирует код как нативный C ++ (это настройка по умолчанию).Среда IDE просто указывает пути к файлам исходного кода, и компилятор в качестве аргументов командной строки переключается на процесс cl.exe.Подсветка синтаксиса не имеет отношения к тому, как компилятор интерпретирует код.

3 голосов
/ 14 июня 2011

Код откажется компилировать, если вы находитесь в C ++ / CLI, поэтому, пока вы нажимаете «build», и он работает, вы знаете, что находитесь на нативном языке. Существуют также предопределенные макросы для сборок CLR.

1 голос
/ 14 июня 2011

Если вам действительно нужно убедиться, что он не компилирует управляемый C ++, посмотрите свойства проекта и проверьте параметр «Поддержка времени выполнения общего языка» в разделе «Свойства конфигурации» -> «Общие».Также для свойств каждого файла в Configuration Properties-> C / C ++ -> General проверьте настройку «Compile with Common Language Runtime support».Если для всех из них установлено «Нет поддержки общеязыковой среды выполнения», проект не управляется C ++.

...