![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Guidelines for Boost AuthorsBoost , Boost.Config , Boost.Config
|
компилятор |
Предупреждение |
---|---|
Визуальный C++ 8 и более поздний |
C4996: Ошибка «функция»: была признана устаревшей |
Intel C++ |
Предупреждение 1786: относится к использованию «устаревших» стандартных библиотечных функций, а не C4996 в Visual C++. |
Когда вам нужно добавить новый макрос дефекта - либо для исправления проблемы с существующей библиотекой, либо при добавлении новой библиотеки - доведите проблему до простого тестового случая; часто в этот момент могут проявиться другие (возможно, лучшие) обходные пути. Во-вторых, всегда размещайте тестовый код в списке рассылки и приглашайте комментарии; помните, что C++ сложен и что иногда то, что может показаться дефектом, на самом деле может оказаться проблемой с пониманием авторами стандарта.
Когда вы называете макрос, следуйте<BOOST_NO_
>.Кое-чтоусловное обозначение, так что очевидно, что это макроотчет о дефекте.
Наконец, добавьте программу тестирования в регрессионные тесты. Вам нужно будет поместить тест-кейс в файл<.ipp
>со следующими комментариями в верхней части:
// MACRO: BOOST_NO_FOO // TITLE: foo // DESCRIPTION: If the compiler fails to support foo
Эти комментарии обрабатываются по сценарию autoconf, поэтому убедитесь, что формат соответствует заданному. Файл должен быть назван «<boost_no_foo.ipp
>», где foo — описание дефекта — попробуйте сохранить имя файла под ограничением имени файла символа Mac 30. Вам также потребуется предоставить функциональный прототип «<inttest()
>», который заявлен в пространстве имен с тем же названием, что и макрос, но во всех нижних случаях, и который возвращает ноль на успех:
namespace boost_no_foo { int test() { // test code goes here: // return 0; } }
После того, как тестовый код установлен в libs/config/test, обновление системы тестирования конфигурации происходит следующим образом:
libs/config/tools
>,<bjam
>и [<bjam
>]. Это генерирует<.cpp
>тестовые файлы из<.ipp
>файла, обновляет libs/config/test/all/Jamfile.v2,<config_test.cpp
>и<config_info.cpp
>.libs/config/test/all
>и запустить<bjam
>MACRONAME<compiler-list
>, гдеMACRONAMEявляется названием нового макроса, а<compiler-list
>представляет собой разделённый по пространству список компиляторов для тестирования.**passed**
>.**passed**
>. ЕслиMACRONAMEопределено, когда оно не должно быть определено, xxx_fail_test не сообщит<**passed**
>libs/config/test
>и запустить<bjam
config_infoconfig_test
><compiler-list
>.<config_info
>должны построить и запустить чисто для всех компиляторов в<compiler-list
>, в то время как<config_test
>должны выйти из строя для тех, у кого есть дефект, и передать для тех, кто не.Тогда вы должны:
Когда вам нужно добавить макрос, который описывает функцию, которая не требуется стандартом, следуйте соглашению для добавления нового макроса дефекта (выше), но вызовите макрос<BOOST_HAS_FOO
>и назовите тестовый файл<boost_has_foo.ipp
>. Не добавляйте макросы для тестирования функций без необходимости, если есть конкретный макрос платформы, который уже можно использовать (например,<_WIN32
>,<__BEOS__
>или<__linux
>), чтобы идентифицировать функцию, а затем используйте эту функцию. Постарайтесь сохранить макрос в группе функций или имени заголовка, а не в одном конкретном API (например,<BOOST_HAS_NL_TYPES_H
>, а не<BOOST_HAS_CATOPEN
>). Если макрос описывает группу функций POSIX, то добавьте код boilerplate в<unistd.h>
>).
Цель настройки конфигурации бустера заключается в том, что заголовки конфигурации должны быть относительно стабильными - пользователю бустера не нужно повторно компилировать свой код только потому, что конфигурация для некоторого компилятора, который им не интересен, изменилась. Разделение конфигурации на отдельные разделы компилятора/стандартной библиотеки/платформы обеспечивает часть этой стабильности, но авторам бустеров также требуется некоторая сдержанность, в частности:
Код выбора компилятора/платформы/стандартной библиотеки настроен так, что неизвестные платформы игнорируются и считаются полностью совместимыми со стандартами — это дает неизвестным платформам «спортивный шанс» работать «как есть» даже без запуска скрипта настройки.
При добавлении или изменении отдельных мини-конфигурок предположим, что будущие, еще не выпущенные версии компиляторов, имеют все дефекты текущей версии. Хотя это, возможно, излишне пессимистично, это сокращает содержание этих файлов, и опыт показывает, что пессимизм здесь лучше, чем оптимизм!
Статья Guidelines for Boost Authors раздела Boost.Config Boost.Config может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Boost.Config ::
реклама |