Переход от Dev-C ++ к VC ++ - PullRequest
2 голосов
/ 24 августа 2010

Да, это нубский вопрос ...

Я до сих пор использую Dev-C ++ для всех своих проектов, но он невероятно устарел, и поэтому в библиотеках.Поэтому я открыл свою копию Visual C ++ и скопировал код.Когда я компилирую, появляется миллион ошибок, как будто каждая вторая строка моего кода - дерьмо.Я не хотел бы начинать проект заново с нуля.

Вопрос: Почему Dev-C ++ и VC ++ компилируются по-разному ???Я слышал, что они используют разные компиляторы, но это все еще C ++.Первой ошибкой, с которой я столкнулся, было неверное сравнение между const char * и std :: string.

В любом случае, есть ли способ сделать VC ++ менее строгим в программировании, как Dev-C ++.Или есть несколько серьезных различий между компиляторами Dec-C ++ и VC ++, о которых я должен знать.

Большинство ошибок, похоже, связаны с std :: string или LPCWSTR (я могу это исправить самостоятельно).

Извините за эту очень широкую и бесполезную тему, я знаю.

-Alex

Ответы [ 4 ]

4 голосов
/ 24 августа 2010

Во-первых, несколько замечаний, потому что многие пользователи Dev-C ++ находятся в замешательстве (как я привык)

Dev-C ++ не компилятор.Компилятор - GCC (или, точнее, модифицированная версия GCC, чтобы он работал в Windows: MinGW).Dev-C ++ - это IDE: текстовый редактор с дополнительной кнопкой, которая при нажатии вызывает MinGW с соответствующими параметрами.

Ничего более.

То же самое для Visual Studio: Visual Studio - это IDE, который вызывает Visual Compiler (vc.exe), который реализует VC ++, который является реализацией Microsoft стандарта C ++.

Второе: это не вопрос нуба.Вы обнаружили проблемы с переносимостью, что является большой проблемой в C и C ++.Многие вопросы по StackOverflow связаны с проблемами переносимости (код, который работает в Windows, но не в Linux и т. Д.).

Общее правило: 1) установить максимальный уровень предупреждений вашего компилятора и 2) развивать параллельно на всех платформах, на которые вы ориентируетесь.

Надеюсь, это поможет.

1 голос
/ 24 августа 2010

Это не ответит на все вопросы, но может помочь.

По умолчанию VC ++ использует Юникод , в то время как MinGW (на котором основывается DevCpp, я считаю) использует ansi .

Это может объяснить ваши проблемы со строками: вы в основном передаете char* строки, где большинству функций требуется что-то вроде wchar*.

Я предлагаю либо исправить ваш код, чтобы он стал совместимым с юникодом, либо отменить определение макроса UNICODE в вашем проекте VC ++, если юникод не требуется.

Как вы сказали, ваш старый код был C ++, а также код C ++, поэтому не должно быть такой большой работы ... до тех пор, пока вы не полагаетесь на поведение, специфичное для компилятора.

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

0 голосов
/ 24 августа 2010

Dev-cpp использует mingw в качестве компилятора. Возможно, вам повезет больше, если вы используете обновленную версию mingw через другую IDE. Это поможет с внешними зависимостями (mingw использует gcc, который использует для ссылки файлы * .a, VC ++ использует файлы * .lib).

Когда вы читаете строку и LPCWSTR, посмотрите ответ ereOn. Убедитесь, что у вас правильно определены UNICODE и _UNICODE (в флагах сборки как -DUNICODE или в параметрах проекта VC ++).

0 голосов
/ 24 августа 2010

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

Кроме того - попробуйте добавить к вопросу одну из самых распространенных ошибок, которые вы получите, со строкой кода, и, возможно, мы сможем прокомментировать.

...