zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« : 27-02-2009 11:55 » |
|
Говорят, в Microsoft Visual Studio 2008 Professional Edition компилятор существенно лучше. Скомпилированные программы работают быстрее, чем в Microsoft Visual С++ 6.
1. Действительно ли настолько лучше или разница небольшая, хотелось бы ссылку на статью с тестами этих версий между собой или как-то самому можно это выяснить?
Если нет практически никакой разницы, тогда ещё два вопросика:
2. В Microsoft Visual С++ 6 размер SP6 примерно в два раза меньше чем SP5, это значит, что я должен для нормальной работы установить SP5, а затем SP6, я-то думал, что все заплатки из старого SP переходят в новый и плюс новые заплатки?
3. Зачем нужно в Microsoft Visual С++ 6 при использовании функции timeGetTime подключать библиотеку #pragma comment(lib, "winmm.lib"), а если не подключать библиотеку, то при запуске программы возникает ошибка text.obj : error LNK2001: unresolved external symbol __imp__timeGetTime@0, я её в компиляторе borland не подключал, она и так работала, да и во многих примерах для Microsoft Visual не написано про это?
Помогите, пожалуйста, разобраться.
|
|
« Последнее редактирование: 06-09-2009 16:08 от Sel »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 28-02-2009 18:19 » |
|
zuze, по твоей просьбе, моё сугубо личное видение : когда новые проекты начну делать - попробую 2008 студию, однако пока что писал только под VC6 . Скорость работы программ пока устраивает. Сервис паков никаких не ставил насчёт вопроса 3 - в либе описано для линковщика, где взять функцию, вот и всё. Не заморачивайся по этому поводу )
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #2 : 28-02-2009 20:02 » |
|
Понял. Большое спасибо что посмотрел!!!
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 28-02-2009 20:04 » |
|
Ок, тогда и моё Насколько я помню, у компилятора 6й студии есть недостатки, связанные с неполной поддержкой стандарта C++. Впрочем, дело тут даже не столько в компиляторе (хотя, если говорить о производительности, то определённый прогресс с годами всё-таки есть, но не могу сказать, насколько значимый прирост производительности). Дело просто в том, что 2008я студия - более современная, нежели VS 6.0. Лично мне от версии к версии (6.0, 7.1, 8.0, наконец 2008я - 9.0, вроде) всё проще пользоваться VS: среда становится удобнее. Плюс, попутный набор библиотек тоже более современный: так, ещё со студией 7.1 поставлялась версия STL, не полностью соответствовавшая стандарту языка. Можно, конечно, тащить все эти библиотеки со стороны (тот же STLPort) - но зачем? В общем, я соглашусь с Алексеем: старые проекты вполне можно поддерживать и старыми средствами (хотя бы по соображениям предсказуемости этих средств), но лучше пользоваться современными инструментами везде, где это возможно.
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #4 : 28-02-2009 20:08 » |
|
Понял.Вот Вы Вад писали что Насколько я помню, у компилятора 6й студии есть недостатки, связанные с неполной поддержкой стандарта C++. Наверно я реально сложных проектов не писал, где бы проявилась с неполной поддержкой стандарта C++ в Microsoft Visual С++ 6. В моих программах написанных на Microsoft Visual С++ 6 и на Microsoft Visual Studio 2008 Professional Edition разницы не было. Всё всегда нормально работало.
|
|
« Последнее редактирование: 28-02-2009 20:15 от zuze »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 28-02-2009 20:46 » |
|
zuze, Ну самый распространенный прикол 6 студии for(int i=0; i<10; i++) //Do something ; for(int i=0; i<10; i++) //Do something;
Этот код в шестерке нельзя скомпилировать. Будет ругаться, что повторное определение переменной i, хотя по стандарту все переменные определенные в теле цикла, принадлежат к зоне видимости самого цикла. Я лично сразу столкнулся с таким приколом, когда переполз с борланда в студию.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #6 : 01-03-2009 06:27 » |
|
Я с этим не сталкивался из-за того что мне всегда где много циклов было, нужно это значение куда-то запоминать модифицировать и т.д. и я делал разные переменные. Но вы меня заинтересовали этим и я решил проверить, действительно не работает, но легко можно поправить. Ну этот прикол в Microsoft Visual C++ 6.for(int i=0; i<10; i++) for(int i=0; i<10; i++)
Легко поправить.int i; for(i=0; i<10; i++) for(i=0; i<10; i++)
Интересно если статья посвещённая таким вещам в интернете, если есть ссылочку дайте пожалуйста интересно будет почитать и проверить на практике то что написано?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 01-03-2009 06:31 » |
|
zuze, Ну самый распространенный прикол 6 студии for(int i=0; i<10; i++) //Do something ; for(int i=0; i<10; i++) //Do something;
Этот код в шестерке нельзя скомпилировать. Будет ругаться, что повторное определение переменной i, хотя по стандарту все переменные определенные в теле цикла, принадлежат к зоне видимости самого цикла. Я лично сразу столкнулся с таким приколом, когда переполз с борланда в студию. хм, а вот я никогда так не делал и не сделал бы
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #8 : 01-03-2009 08:17 » |
|
Finch, так все логично. Ведь, как компилятору определить в теле вложенного цикла какую переменную i использовать - своего цикла или внешнего цикла.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #9 : 01-03-2009 12:45 » |
|
zubr, Это не вложенные цикли А два раздельных цикла. Чтоб показать это, я специально закрыл точкой с запятой. Алексей1153++, Просто я всегда стараюсь использовать i в качестве переменной цикла. И сталкивался несколько раз, когда в теле одного блока мне нужно было делать несколько циклов. Простой пример. Я как-то убирал шум с черно белой картинки, Нужно было делать два прохода. Первый сверху вниз, второй снизу наверх. Причем второй проход зависил от результатов первого. Тут в один цикл это не сольёш. Кстати были еше несколько глюков 6 студии. Но довольно мелькие. Поэтому я и не запомнил.
|
|
« Последнее редактирование: 01-03-2009 12:49 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 01-03-2009 12:52 » |
|
Finch, для двух циклов - определить можно перед циклами, как zuze , а ты точку с запятой не поставил - она у тебя закомментирована ) У тебя вложенный цикл
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #11 : 01-03-2009 13:18 » |
|
Алексей1153++, Скажем так, я привел схему. Заместо Do Something естественно будет что то более сушественное чем просто коментарий. Ну в принципе для совместимости я и делал как zuze. Хотя в 6 студии если убрать int во втором цикле, то компилятор не будет иметь ничего против.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 01-03-2009 14:07 » |
|
Finch, можно и во втором только убрать, но тогда будет некрасиво
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 04-09-2009 02:45 » |
|
вопрос такой: в VC6 , если применять более или менее вложенные шаблоны, можно наткнуться на ахтунг, когда компилятор выдаёт кучу-кучу предупреждений о том, что для дебаггера имя идентификатора порезано до 255 символов (ну да, он там длинновато выглядит внутри). Само по себе не страшно, но компиляция очень тормозится, да и output замусорен... В студии №9 такой проблемы нет (наверное, увеличили до 65535)
1) как в №6 заставить компилятор игнорировать и не показывать предупреждения ? 2) либо - как с этим бороться (уменьшения длин имён классов не помогает)
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #14 : 04-09-2009 03:15 » |
|
// Disable warning messages 4507 and 4034. #pragma warning( disable : 4507 34 )
// Issue warning 4385 only once. #pragma warning( once : 4385 )
// Report warning 4164 as an error. #pragma warning( error : 164 )
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 04-09-2009 03:20 » |
|
а не отключается. Может , я не туда вставил, конечно. Я пробовал в хедере шаблона
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #16 : 04-09-2009 03:31 » |
|
Какой номер ?
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 04-09-2009 03:34 » |
|
#pragma warning( disable : 4786 )
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #18 : 04-09-2009 03:38 » |
|
Вставь директиву перед всеми подключениями заголовков.
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 04-09-2009 03:45 » |
|
всё равно не отключается
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #20 : 04-09-2009 03:53 » |
|
Где поставил? В .сpp? Не может быть что не отключается... Надо что бы директива была выполнена до первого использования шаблона (код из MSDN) // compile options required: /Zi /GX #include <iostream> #include <string> #include <map>
// move this pragma before the includes above to disable the //C4786 warnings #pragma warning (disable : 4786)
int main () { using namespace std; map<int,string> m; m[0] = "hello world"; cout << m[0] << endl;
return 0; }
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 04-09-2009 03:58 » |
|
и там тоже ставил ( Всё равно ругаецо
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 04-09-2009 03:59 » |
|
кстати, вроде как есть опция /wd4786 для компилятора, так он в VC6 пишет, что опция неизвестна и игнорируется ))
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #23 : 04-09-2009 04:28 » |
|
Гм. However, this method does not disable all such warnings in Visual C++ version 6.0. The occurrence of many C4786 warnings may result in the following: C1033 error: cannot open program database 'vc60.pdb'. Use the pragma directive before you include any STL headers to disable the warnings.
Попробуй поднять выше include объявлений. P.S.: Позырь KB167355...
|
|
« Последнее редактирование: 04-09-2009 04:35 от sss »
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #24 : 04-09-2009 04:39 » |
|
Можно еще изменить уровень с W1 на W4 #pragma warning( 4 : 4786)
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 04-09-2009 04:46 » |
|
всё едино так же )
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #26 : 04-09-2009 05:24 » |
|
Покажи место в коде.
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 04-09-2009 05:31 » |
|
код большой
щас попробую абстракцию соорудить
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 04-09-2009 05:45 » |
|
всё, источник ног проблемы нашёлся Векторный инклуд был в stdafx.h , там и надо было перед ним прагму вставить. Тогда не ругается больше. тестовый код такой template<class B,class C,class D> class A { public: class X0123456789012345678901234567890123456789 { B b; C c; D d; }; };
std::vector< A<int,int,int>::X0123456789012345678901234567890123456789> v;
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #29 : 18-09-2009 08:30 » |
|
в студии 2008: есть ли встроенный SDK для MySQL 5(+) ? Если есть, что и как называется и где лежит ?
|
|
|
Записан
|
|
|
|
|