Я только что перенес сравнительно большую кодовую базу с VS2003 на VS2008 через VS2005, и большинство проблем, которые я обнаружил, были постоянными / неконстантными проблемами, такими как присвоение возвращаемого значения функции, которая возвращает const char * для char *. И VS2005, и VS2008 гораздо более требовательны, когда дело доходит до правильности констант, и если ваша существующая кодовая база немного небрежна, извините, старая школа, когда дело доходит до константности, вы увидите много этого.
Очень долгожданным изменением стало то, что поддержка шаблонов в VS2005 заметно лучше, чем в VS2003 (сам по себе большое улучшение в более ранних версиях), что позволило мне исключить несколько обходных путей для проблем, связанных с шаблонами, которые перетаскивала команда. вокруг с бурных дней VC ++ 4.x.
Одной из проблем, с которой вы, вероятно, столкнетесь, являются тонны предупреждений о «устаревших» или «небезопасных» функциях, особенно если вы используете строковые функции Си. Многие из них «устарели от Microsoft» (только из-за того, что они исключили часть «от Microsoft») и по-прежнему идеально подходят для использования, но являются потенциальными источниками переполнения буфера. В проектах, которые я конвертировал, я установил препроцессор определение _CRT_SECURE_NO_WARNINGS и отключил предупреждение C4996, чтобы отключить эти несколько раздражающие сообщения.
Другая проблема, с которой мы столкнулись, заключается в том, что MS изменила размер по умолчанию time_t либо в VS2005, либо в VS2008 (извиняюсь, но не помню - он определенно в VS2008, но, возможно, уже в VS2005), так что если вы необходимо связать со старыми библиотеками, которые используют time_t в интерфейсе, вам придется использовать _USE_32BIT_TIME_T, чтобы вернуться к поведению старого компилятора.
Если ваше решение содержит несколько проектов, вы можете обнаружить, что функция параллельной сборки (которая включена по умолчанию) выделит отсутствующие зависимости сборки. поэтому проекты неожиданно создаются в неправильном порядке, но магически создаются правильно, если вы возвращаетесь из параллельной сборки обратно в линейную.
В целом я предпочитаю VS2005 / 8 VS2003, и я бы рекомендовал обновить до VS2008, если это возможно, поскольку компилятор "лучше", чем VS2005 - MS, похоже, приложила огромные усилия для улучшения нативного C ++ компилятор. Часть этого уже была заметна в 2005 году, поэтому вы получите хотя бы часть преимуществ, даже если будете придерживаться 2005 года.