![]() |
По ту сторону барикад или разработка компиляторо-независимого кода
тут предлагаю выкладывать советы, мысли и идеи по сабжу
стандарт C++ в принципе всеми воспринимается по разному в том же MSVC куча microsoft specified фич код который удачно компилируется на Mingw ... врядли так же удачно скомпилируется на msvc 2008 о обратном ваще молчу ... :) но есть методы и подходы которые минимализируют затраты на портирование кода ... и так несколько советов : 1) помимо студии установите себе mingw и code::blocks сумарно установщик скачает около 60-70 мб и раз в неделю импортируйте проект в code::blocks и пытайтесь его скомпилировать, это уже покажет множество проблем при портировании на линукс 2) STL это конечно хорошо, но надо планировать архитектуру так чтобы классы STL при потребности можно было заменить на свои спорные функции лутче переопределить на свои с inline параметром 3) обязательно переопределите классы для unicode и ansi текста хотя бы через typedef ... очень часто могут возникнуть с етим проблемы 4) MSVC компилирует только то что нужно, GCC компилирует всё это конечно странно, но я с таким столкнулся при компиляции статически либ ... msvc просто вырезал функции которые нигде не вызывались ... а GCC порядочно матерился что я там дефайны не поставил и тд .. в общем GCC покажет все ошибки кода 5) выделите в своём коде Platform Depends секцию, а лутче и отдельную библиотеку ... менеджемент памяти, управление окнами вызов системных диалогов и прочая гадость - всё зависит от платформы и компилятора ... так что сведите весь зависимый код в отдельную библиотеку ... с ней потом и будете шаманить 6) избегайте любых компиляторо-зависимых решений ... все компиляторы делают по разному и если вы решили делать какие либо там прыжки по таблице переходов то лутче уж выделите это препроцессором и пусть включается только если компилируется на определённом компиляторе важно иметь к каждому хитрому решению и не хитрое иногда главное чтобы работало .. а о скорости потом будем думать 7) GCC требует чтобы последняя строчка заголовка была пустая :) странное требование ... но если его не выполнять то будет куча мата 8 ) нельзя использовать windows specified типы во всём коде пусть они используется только в маленьком кусочке кода в platform 9) в линуксе название файлов так же зависит от регистра букв так что если в винде "aaa.txt" и "AAA.txt" это один и тот же файл то в линуксе это разные файлы :) ps. и еще куча советов :) буду дополнять исходя из своих похождений |
Часовой пояс GMT +4, время: 11:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot