Обсуждаем компиляторы

Тема в разделе "Машинное отделение", создана пользователем WinPooh, 29 июн 2007.

  1. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Сразу бы так и написал.
    А с суфиксами как быть?
  2. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Так я сразу ссылку на статью и привёл.

    Как быть с суффиксами я не знаю. Пишут, что VS понимает суффикс i64, который вроде эквивалентен LL. Если действительно понимает, то наверное можно сделать глобальную замену в исходниках или макрос написать.

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Нехорошо вместо ответов по ссылкам посылать.
  4. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    согласен, ссылка нужна для подтверждения правоты. а разве VC++ 2005 тоже не понимает констант? вроде это было только в VC++ 6.0
  5. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Забавно, что у меня прямо противоположное мнение. :)
  6. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Лично я бы поверил на слово и без ссылки.
  7. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    WildCat ты мой исходник будешь компилить или нет?
  8. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    я могу откомпилитть :) скачал на днях IC 9.1
  9. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Народ, поделитесь опциями, с какими оптимизируете под Интеловским компилятором.
  10. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я куда-то записывал свои сравнения, а куда не помню.
    Попробуй по всякому (в документации есть описание всех ключей).
    Компилирование с профилированием, тестовый запуск, и компилирование с использованием профайла мне не дало ничего.
  11. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Пока что я пробовал /Qipo /O3 /DNODEBUG, но результаты что-то в разы хуже, чем у gcc. Что-то важное я упустил.
  12. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    WinPooh я ставил все аналогично VС++, за мелкими отличиями - получилось чуть быстрей чем на VC++. профилирование не включал.
  13. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Осталось сообщить, что ты ставишь в VC++, потому что я им не пользуюсь.
  14. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    У меня VC++ 6.0, компилирую из под оболочки с установленной опцией максимальная скорость. Может в командном режиме можно ещё быстрее как то? И вообще как компилятор из командной строки запускать? Я никогда не пробовал.
  15. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Важно поставить calling convention = fastcall /Gr
    также для оптимизации скорости можно просто указать /O2.
  16. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    /O2 /Ob2 /Ot
    Больше ничего не надо. Можешь попробовать скомпилировать с профилированием. Мож чего даст.
  17. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    вот при каких ключах Intel 9.1 сгенерировал у меня наиболее быстрый код:
    добавление /Ob2 ничего не дает, хотя, inline функции должны вызываться быстрее.
  18. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Зависит от того сам проставил инлайны или нет. Параметр -Ob2 позволяет их не ставить. То есть выносишь критичные участки в отдельные процедуры, делаешь в них минимум переменных, и компилятор сам заинлайнит что надо. Хотя можно это сделать и вручную.
  19. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Разным программам инлайны помогают очень по разному. Просто нужно на практике проверить какая опция лучше.
  20. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    я ставил /O3, остальное как у Крея (+-)
  21. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    Я запускаю MSDEV.EXE /Gr /O2 chess.cpp но вместо компиляции запускается оболочка. Как компильнуть? Дайте конкретную строку, ПЛИИИИЗЗЗЗ!!!!.
  22. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Я из командной никогда не компилил. Так что это не ко мне.
  23. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я знаю как запустить из командной строки интеловский :)
  24. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    VC++ 2005 выдает такую ошибку:
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    на такую строку:
    const A = 10;

    Всегда считал, что на C++ int можно опускать в таких случаях. Я неправ?

    Причем, это не предупреждение, а ошибка.
  25. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    ???? Срочно бежать и покупать Страуструпа и читать, читать, читать!!!
    раздел Б.2.2
    Если коротко, то по стандарту в C++ int опускать нельзя.

    http://www.research.att.com/~bs/3rd_compat.pdf
  26. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Во, блин горе, всегда можно было, а теперь нельзя.
  27. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    :lol:
    лично я считаю что лучше всегда тип указывать, не опускать. это как со счетчиком цикла. вроде можно объявлять сразу в теле... но в разных компиляторах он считается по-разному - объявленым локально в теле цикла в одних, или же глобальным по отношению к остальным...
  28. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    А как быть с этим:
    Код:
      cout.rdbuf()->setbuf(NULL, 0);
      cin.rdbuf()->setbuf(NULL, 0);
    error C2248: 'std::basic_streambuf<_Elem,_Traits>::setbuf' : cannot access protected member declared in class 'std::basic_streambuf<_Elem,_Traits>'
  29. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    жалко стандарт на русский не переведен, а то мне трудно читать талмуд из 1000 стр. на буржуйском языке...
  30. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Код:
      cout.rdbuf()->pubsetbuf(NULL, 0);
      cin.rdbuf()->pubsetbuf(NULL, 0);
    Страуструп 21.6.4
  31. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Читай Страуструпа. Мне его хватает в 99.9% случаях. Я в стандарт заглядывал всего несколько раз, да и то из чистого любопытства.
  32. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    а как его читать - у меня книжку взяли почитать и не отдаютЬ :(
  33. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Проблема с Intel C++ 9.1:
    Код:
        char date[128];
        GetDateFormat(0, DATE_SHORTDATE, 0, 0, (LPTSTR)date, 128);
    
        char time[128];
        GetTimeFormat(0, TIME_FORCE24HOURFORMAT, 0, (LPCTSTR)"HH'-'mm'-'ss", (LPTSTR)time, 128);
    Без преобразований типов он вообще отказывается компилировать. А с преобразованиями компилирует, но код не работает. В чем тут дело?

    Версия 6.0 прекрасно компилировала этот и без всяких преобразований.
  34. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Извиняюсь, но тут я пас. GetDateFormat не является стандартной функцией.
    А чем стандартная функция localtime не подходит?

    Код:
    localtime()
    
    Syntax:
    
    #include <ctime>
    struct tm *localtime( const time_t *time );
    
    Description:
    The function localtime() converts calendar time time into local time.
    http://www.opennet.ru/man.shtml?topic=localtime&category=3&russian=0
    http://msdn2.microsoft.com/en-us/library/bf12f0hc(VS.80).aspx
    В Страуструпе ничего о функции localtime нет. :)
  35. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Пришлось переделать под localtime.
    Но все-таки интересно что там не так c GetDateFormat.

Поделиться этой страницей