Разработки          Услуги          О компании          Контакты  

Перенос исходников из Microsoft Visual C++ в MinGW с сохранением совместимости с разными компиляторами

Материал из биософт-м

Перейти к: навигация, поиск

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)

Компиляция проектов организуется Jam, так что у нас изначально нет зависимости от msbuild.

Опции компилятора

MSVC понимает дефис и слеш, MinGW только дефис. Частично опции пересекаются.

cc1plus.exe: error: invalid option argument '-Od'
cc1plus.exe: error: unrecognized command line option "-W4"
cc1plus.exe: error: to generate dependencies you must specify either -M or -MM
gcc: unrecognized option '-EHs'
gcc: unrecognized option '-GR-'
gcc: unrecognized option '-Zi'
gcc: unrecognized option '-Gr'
gcc: unrecognized option '-RTC1'

И исправил Cx чтобы он тоже дефис понимал.

Templates

Темплейты VC++ воспринимает чисто как макросы и не пытается проверять идентификаторы в них. GCC же согласно стандарту заставляет всем идентификаторам не завязанным на (неизвестные) типы параметров шаблона быть декларированным.

Отсюда перенос многих тел темплейтных функций за после деклараций всего что они используют.

Плюс гениальный прерыватель незаконного экземпляра темплейта вида

    void Assign(str sValue)
    {
        _____do_not_assign_strings_to_this_object_____;
    }

приходится в связи со стандартной интерпретацией фиксить:

    void Assign(str sValue)
    {
        this->_____do_not_assign_strings_to_this_object_____;
    }


Microsoft-only features

С++

__super - не поддерживается стандартом. Неоднозначно при применении множественного наследования. У нас множественное наследование классов запрещено. Реализуем __super посредством Cx.

www.biosoft-m.ru



Просмотры
Личные инструменты