Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.84.161] |
|
Страницы: (20) [1] 2 3 ... 19 20 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Господа.
Давайте в этот топик писать обо всех проблемах перехода на VS 2005/2008 Указывать с какой версии переходили, что за проблема, и способы ее решения. Или если решение не найдено, задавать вопрос. 2Админы: Если сочтете нужным прикрепите этот топ. |
Сообщ.
#2
,
|
|
|
Может тогда проблемы перехода с одной студии на другую, не обязательно на 2005,
за ней ведь наверняка появится и 2006б 2007, ..., 10000 p.s. Хотя ИМХО всех этих проблем не были бы, если бы при написании того же MFC Microsoft иногда посматривало бы в стандарт по C++, а не по С! И хотя бы попыталось усвоить, что такое ООП... |
Сообщ.
#3
,
|
|
|
Пытался собирать проект (созданный в VS2003) в VS2005. Под VS 2003 проект компилился без ошибок (и даже без предупреждений). В 2005-й студии возникло несколько ошибок суть, которых в следующем: вот кусок кода, который вызывает ошибку
for(int i = 0; i < 5; i++) { ... } for(i = 0; i < 5; i++) { ... } |
Сообщ.
#4
,
|
|
|
Угу.а я наткнулся на то что std::hash_map теперь не в std а в stdext..
решил проблему добавлением namespace std { using namespace stdext; } что правда не очень хорошо... т.к. по стандарту я не имею право ковыряться в этом namespace - е .. |
Сообщ.
#5
,
|
|
|
Цитата dim_on @ но хотелось бы узнать почему произошли такие изменения в новой студии и можно ли изменить трактовку компилятором таких фрагментов, на ту, которая была в VS 2003? Она стала больше дружить со стандартом. А по нему это всегда было ошибкой, и ты рано или поздно должен был получить по рукам за такой код. |
Сообщ.
#6
,
|
|
|
Цитата ViGOur @ p.s. Хотя ИМХО всех этих проблем не были бы, если бы при написании того же MFC Microsoft иногда посматривало бы в стандарт по C++, а не по С! И хотя бы попыталось усвоить, что такое ООП... Не только MFC. ATL тоже не безгрешна)) к примеру _Module и __uuidof ----> имена зарезервированные стандартом |
Сообщ.
#7
,
|
|
|
Вот ещё:
1) Будьте осторожны - 8 студия не компилирует неиспользуемые участки. 2) Если вы хотите оставить совместимость с предыдущими версиями студий, то вам придётся пользоватся условной компиляцией и делать развилки: #if _MSC_VER >= 1400 // Тут используем новые функции crt, с новой политикой безопасности // Все новые версии функций crt заканчиваются специальным суффиксом '_s' ("secure") #else // Тут используем старые функции #endif 3) Настоятельно советую почитать раздел "Security Enhancements in the CRT" в MSDN. |
Сообщ.
#8
,
|
|
|
У всех студий есть некая таинмтвенная бага в реализации спецификации шаблонов, поэтому, например, Foobar SDK компилируется ТОЛЬКО для 2005 студии.
|
Сообщ.
#9
,
|
|
|
Цитата dim_on @ Ошибка error C2065: 'i' : undeclared identifier в выделенной строке. Исправить это можно конечно просто определив переменную i вне тела 1-го цикла, но хотелось бы узнать почему произошли такие изменения в новой студии и можно ли изменить трактовку компилятором таких фрагментов, на ту, которая была в VS 2003? В свойствах проекта во вкладке c++ language можно убрать галку "for loop conformant scope" (или что-то в этом роде). А вообще, по стандарту правильно именно такое поведение. |
Сообщ.
#10
,
|
|
|
Цитата mo3r @ А вообще, по стандарту правильно именно такое поведение. Такое - это какое? Правельнее в 2005-ой без галки.. |
Сообщ.
#11
,
|
|
|
По поводу безопасности в VS2005, _s закрывает одни дыры, открывает другие, к примеру если копировался путь с использованием strcpy_s и не скопировался полностью, то поведение программы может быть неизвестно, соответсвенно надо самому проверять длинну строки, что приводит к двойной проверке одних и тех же данных, так что я не вижу смысла в этих функциях.
|
Сообщ.
#12
,
|
|
|
Axis, Никаких дыр она не открывает. И не путай защиту на выход за пределы участка памяти, и защиту от нерадивого программера...
|
Сообщ.
#13
,
|
|
|
у меня одна проблема была при попытке перейти с 6.0 на 2005 - жутко не понравился интерфейс.
злой он там какой то. все привычные по шестерке действия в 2005 совершенно по другому. |
Сообщ.
#14
,
|
|
|
Цитата Ace @ // Тут используем новые функции crt, с новой политикой безопасности // Все новые версии функций crt заканчиваются специальным суффиксом '_s' ("secure") Чем начисто убиваем переносимость кода. |
Сообщ.
#15
,
|
|
|
Цитата Axis @ если копировался путь с использованием strcpy_s и не скопировался полностью, то поведение программы может быть неизвестно Тебе надо сильно постараться, чтобы поведение программы стало неизвестным. В частности, написать свою ловушку для неправильных аргументов, в которой ты будешь игнорировать такие вещи. |