Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3 4  Все   Вниз
  Печать  
Автор Тема: Несколько вопросов по поводу Visual C++  (Прочитано 80852 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuze
Опытный

ru
Offline 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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 28-02-2009 18:19 » 

zuze, по твоей просьбе, моё сугубо личное видение Улыбаюсь :

когда новые проекты начну делать - попробую 2008 студию, однако пока что писал только под VC6 . Скорость работы программ пока устраивает. Сервис паков никаких не ставил

насчёт вопроса 3 - в либе описано для линковщика, где взять функцию, вот и всё. Не заморачивайся по этому поводу )
Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #2 : 28-02-2009 20:02 » 

Понял.
Большое спасибо что посмотрел!!!
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #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
Опытный

ru
Offline 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
Спокойный
Администратор

il
Offline 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
Опытный

ru
Offline 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++)

Интересно если статья посвещённая таким вещам в интернете, если есть ссылочку дайте пожалуйста интересно будет почитать и проверить на практике то что написано?


Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 01-03-2009 12:45 » 

zubr, Это не вложенные цикли Улыбаюсь А два раздельных цикла. Чтоб показать это, я специально закрыл  точкой с запятой.

Алексей1153++, Просто я всегда стараюсь использовать i в качестве переменной цикла. И сталкивался несколько раз, когда в теле одного блока мне нужно было делать несколько циклов. Простой пример. Я как-то убирал шум с черно белой картинки, Нужно было делать два прохода. Первый сверху вниз, второй снизу наверх. Причем второй проход зависил от результатов первого. Тут в один цикл это не сольёш.

Кстати были еше несколько глюков 6 студии. Но довольно мелькие. Поэтому я и не запомнил.
« Последнее редактирование: 01-03-2009 12:49 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 01-03-2009 12:52 » 

Finch, для двух циклов - определить можно перед циклами, как zuze , а ты точку с запятой не поставил - она у тебя закомментирована ) У тебя вложенный цикл
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 01-03-2009 13:18 » 

Алексей1153++, Скажем так, я привел схему. Заместо Do Something естественно будет что то более сушественное чем просто коментарий. Ну в принципе для совместимости я и делал как zuze. Хотя в 6 студии если убрать int во втором цикле, то компилятор не будет иметь ничего против.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 01-03-2009 14:07 » 

Finch, можно и во втором только убрать, но тогда будет некрасиво Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 04-09-2009 02:45 » 

вопрос такой:
в VC6 , если применять более или менее вложенные шаблоны, можно наткнуться на ахтунг, когда компилятор выдаёт кучу-кучу предупреждений о том, что для дебаггера имя идентификатора порезано до 255 символов (ну да, он там длинновато выглядит внутри). Само по себе не страшно, но компиляция очень тормозится, да и output замусорен... В студии №9 такой проблемы нет (наверное, увеличили до 65535)

1) как в №6 заставить компилятор игнорировать и не показывать предупреждения ?
2) либо - как с этим бороться (уменьшения длин имён классов не помогает)
Записан

sss
Специалист

ru
Offline 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)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 04-09-2009 03:20 » 

а не отключается. Может , я не туда вставил, конечно. Я пробовал в хедере шаблона
Записан

sss
Специалист

ru
Offline Offline

« Ответ #16 : 04-09-2009 03:31 » 

Какой номер ?
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 04-09-2009 03:34 » 

#pragma warning( disable : 4786 )
Записан

sss
Специалист

ru
Offline Offline

« Ответ #18 : 04-09-2009 03:38 » 

Вставь директиву перед всеми подключениями заголовков.
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 04-09-2009 03:45 » 

всё равно не отключается
Записан

sss
Специалист

ru
Offline 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)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 04-09-2009 03:58 » 

и там тоже ставил ( Всё равно ругаецо
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 04-09-2009 03:59 » 

кстати, вроде как есть опция /wd4786 для компилятора, так он в VC6 пишет, что опция неизвестна и игнорируется ))
Записан

sss
Специалист

ru
Offline Offline

« Ответ #23 : 04-09-2009 04:28 » 

Гм.
Цитата: MSDN
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
Специалист

ru
Offline Offline

« Ответ #24 : 04-09-2009 04:39 » 

Можно еще изменить уровень с W1 на W4
Код:
#pragma warning( 4 : 4786)
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 04-09-2009 04:46 » 

всё едино так же )
Записан

sss
Специалист

ru
Offline Offline

« Ответ #26 : 04-09-2009 05:24 » 

Покажи место в коде.
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 04-09-2009 05:31 » 

код большой

щас попробую абстракцию соорудить
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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;

Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #29 : 18-09-2009 08:30 » 

в студии 2008:
есть ли встроенный SDK для MySQL 5(+) ? Если есть, что и как называется и где лежит ?
Записан

Страниц: [1] 2 3 4  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines