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

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

  1. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Сразу бы так и написал.
    А с суфиксами как быть?
     
  2. MikhailK
    Оффлайн

    MikhailK Mikhail Kalenkov

    Репутация:
    0
    Так я сразу ссылку на статью и привёл.

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

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Нехорошо вместо ответов по ссылкам посылать.
     
  4. krey
    Оффлайн

    krey Михаил Кройтор Команда форума Команда форума

    Репутация:
    1
    согласен, ссылка нужна для подтверждения правоты. а разве VC++ 2005 тоже не понимает констант? вроде это было только в VC++ 6.0
     
  5. MikhailK
    Оффлайн

    MikhailK Mikhail Kalenkov

    Репутация:
    0
    Забавно, что у меня прямо противоположное мнение. :)
     
  6. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Лично я бы поверил на слово и без ссылки.
     
  7. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    WildCat ты мой исходник будешь компилить или нет?
     
  8. krey
    Оффлайн

    krey Михаил Кройтор Команда форума Команда форума

    Репутация:
    1
    я могу откомпилитть :) скачал на днях IC 9.1
     
  9. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Народ, поделитесь опциями, с какими оптимизируете под Интеловским компилятором.
     
  10. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Я куда-то записывал свои сравнения, а куда не помню.
    Попробуй по всякому (в документации есть описание всех ключей).
    Компилирование с профилированием, тестовый запуск, и компилирование с использованием профайла мне не дало ничего.
     
  11. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Пока что я пробовал /Qipo /O3 /DNODEBUG, но результаты что-то в разы хуже, чем у gcc. Что-то важное я упустил.
     
  12. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    WinPooh я ставил все аналогично VС++, за мелкими отличиями - получилось чуть быстрей чем на VC++. профилирование не включал.
     
  13. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Осталось сообщить, что ты ставишь в VC++, потому что я им не пользуюсь.
     
  14. ProstoTak
    Оффлайн

    ProstoTak Старожил

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Важно поставить calling convention = fastcall /Gr
    также для оптимизации скорости можно просто указать /O2.
     
  16. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    /O2 /Ob2 /Ot
    Больше ничего не надо. Можешь попробовать скомпилировать с профилированием. Мож чего даст.
     
  17. krey
    Оффлайн

    krey Михаил Кройтор Команда форума Команда форума

    Репутация:
    1
    вот при каких ключах Intel 9.1 сгенерировал у меня наиболее быстрый код:
    добавление /Ob2 ничего не дает, хотя, inline функции должны вызываться быстрее.
     
  18. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Зависит от того сам проставил инлайны или нет. Параметр -Ob2 позволяет их не ставить. То есть выносишь критичные участки в отдельные процедуры, делаешь в них минимум переменных, и компилятор сам заинлайнит что надо. Хотя можно это сделать и вручную.
     
  19. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Разным программам инлайны помогают очень по разному. Просто нужно на практике проверить какая опция лучше.
     
  20. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    я ставил /O3, остальное как у Крея (+-)
     
  21. ProstoTak
    Оффлайн

    ProstoTak Старожил

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Я из командной никогда не компилил. Так что это не ко мне.
     
  23. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Я знаю как запустить из командной строки интеловский :)
     
  24. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    VC++ 2005 выдает такую ошибку:
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

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

    Причем, это не предупреждение, а ошибка.
     
  25. MikhailK
    Оффлайн

    MikhailK Mikhail Kalenkov

    Репутация:
    0
    ???? Срочно бежать и покупать Страуструпа и читать, читать, читать!!!
    раздел Б.2.2
    Если коротко, то по стандарту в C++ int опускать нельзя.

    http://www.research.att.com/~bs/3rd_compat.pdf
     
  26. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Во, блин горе, всегда можно было, а теперь нельзя.
     
  27. krey
    Оффлайн

    krey Михаил Кройтор Команда форума Команда форума

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    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
    Оффлайн

    krey Михаил Кройтор Команда форума Команда форума

    Репутация:
    1
    жалко стандарт на русский не переведен, а то мне трудно читать талмуд из 1000 стр. на буржуйском языке...
     
  30. MikhailK
    Оффлайн

    MikhailK Mikhail Kalenkov

    Репутация:
    0
    Код:
      cout.rdbuf()->pubsetbuf(NULL, 0);
      cin.rdbuf()->pubsetbuf(NULL, 0);
    Страуструп 21.6.4
     
  31. MikhailK
    Оффлайн

    MikhailK Mikhail Kalenkov

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

    krey Михаил Кройтор Команда форума Команда форума

    Репутация:
    1
    а как его читать - у меня книжку взяли почитать и не отдаютЬ :(
     
  33. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    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
    Оффлайн

    MikhailK Mikhail Kalenkov

    Репутация:
    0
    Извиняюсь, но тут я пас. 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
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Пришлось переделать под localtime.
    Но все-таки интересно что там не так c GetDateFormat.