История изменений
Исправление slovazap, (текущая версия) :
Несовместимость может появиться и в runtime, так что намного надёжнее тесты и CI, это сейчас доступно всем и защищает от кучи других проблем.
Короче у меня от этой кроссплатформенности голова кругом
Это только по первости. Не концентрируйся на этом, просто не пользуйся платформозависимыми конструкциями и API. Пару раз может быть наступишь на грабли если привык к какой-то платформоспецифичной гадости, потом запомнишь и не будешь больше использовать. Если не уверен в переносимости функции - просто открывай соответствующий man и ищи там conforms to.
~$[POSIX - ISO/IEC/IEEE 9945:2009] - 100% совместимости : используйте -v для подробностей
~$[POSIX - ISO/IEC/IEEE 9945:2009/Cor 2:2017] - 2 ошибки совместимости : используйте -v для подробностей
~$[и так далее всякие ISO C 99/11 куча всего] ~$[Word 8] - Работа невозможна! ~$[Word 16] - Работа невозможна!
Обо всём этом тебе даже знать не нужно. Тебе нужно чтобы оно собиралось gcc/clang (и возможно cl) на 64 (и возможно 32) битах x86 (и возможно arm) linux/osx/windows (и возможно какой-нибудь bsd для полноты) и потом работало.
- Travis покрывает gcc+clang и linux+osx
- Appveyor покрывает cl (можно и gcc/clang до кучи)+windows
По желанию там можно добавить санитайзеры и cppcheck. Можно сделать CI в coverity, в своё время там был крутой статический анализ.
Итого если ты что-то сломал на любой платформе, узнаешь об этом в течение пары минут.
Я лично разрабатываюсь под FreeBSD что ещё увеличивает покрытие.
Остаются биты и архитектуры. Тут про изкоробочное я не в курсе, но если это нужно, для CI можно погуглить на тему использования 32битны докерных образов, кросскомпиляции и запуске под qemu. На самом деле не обязательно тестировать это покоммитно - достаточно приёмки перед релизом, а так как это нужно относительно редко можно использовать и менее удобные вещи, вплоть до ручного тестирования под виртуалками, эмуляторами и на реальном железе.
Я лично пользуюсь штатными средствами опять таки FreeBSD - делаю порт и собираю с запуском тестов в poudriere подо все архитектуры которые qemu умеет эмулировать.
Исходная версия slovazap, :
Несовместимость может появиться и в runtime, так что намного надёжнее тесты и CI, это сейчас доступно всем и защищает от кучи других проблем.
Короче у меня от этой кроссплатформенности голова кругом
Это только по первости. Не концентрируйся на этом, просто не пользуйся платформозависимыми конструкциями и API. Пару раз может быть наступишь на грабли если привык к какой-то платформоспецифичной гадости, потом запомнишь и не будешь больше использовать. Если не уверен в переносимости функции - просто открывай соответствующий man и ищи там conforms to.
~$[POSIX - ISO/IEC/IEEE 9945:2009] - 100% совместимости : используйте -v для подробностей
~$[POSIX - ISO/IEC/IEEE 9945:2009/Cor 2:2017] - 2 ошибки совместимости : используйте -v для подробностей
~$[и так далее всякие ISO C 99/11 куча всего] ~$[Word 8] - Работа невозможна! ~$[Word 16] - Работа невозможна!
Обо всём этом тебе даже знать не нужно. Тебе нужно чтобы оно собиралось gcc/clang (и возможно cl) на 64 (и возможно 32) битах x86 (и возможно arm) linux/osx/windows (и возможно какой-нибудь bsd для полноты) и потом работало.
- Travis покрывает gcc+clang и linux+osx
- Appveyor покрывает cl (можно и gcc/clang до кучи)+windows
Итого если ты что-то сломал на любой платформе, узнаешь об этом в течение пары минут.
Я лично разрабатываюсь под FreeBSD что ещё увеличивает покрытие.
Остаются биты и архитектуры. Тут про изкоробочное я не в курсе, но если это нужно, для CI можно погуглить на тему использования 32битны докерных образов, кросскомпиляции и запуске под qemu. На самом деле не обязательно тестировать это покоммитно - достаточно приёмки перед релизом, а так как это нужно относительно редко можно использовать и менее удобные вещи, вплоть до ручного тестирования под виртуалками, эмуляторами и на реальном железе.
Я лично пользуюсь штатными средствами опять таки FreeBSD - делаю порт и собираю с запуском тестов в poudriere подо все архитектуры которые qemu умеет эмулировать.