Операционная система UNIX


Особенности мобильного программирования на языке Си - часть 9


  • Функции memcpy, strcpy или strncpy копируют объект в перекрывающийся с ним по памяти другой объект.
  • В формате функции strftime обнаружена неверная спецификация преобразования.
  • Все перечисленные ситуации являются ошибочными, однако разные реализации могут по-разному реагировать на них. Может даже случиться, что в некоторых реализациях программы с неопределенным поведением работают и выдают нужные результаты. Однако такие программы, как правило, невозможно перенести на другую вычислительную систему.

    Например, используя в расчетной программе неверные арифметические операции (деление на ноль или операции, приводящие к переполнению или потере значимости), можно добиться удовлетворительной, с точки зрения конечного результата, работы этой программы за счет использования нюансов обработки таких исключительных ситуаций в рамках конкретной вычислительной системы. На других же вычислительных системах эта программа либо вообще не будет работать, либо будет выдавать неудовлетворительные результаты. Больше того, может потребоваться даже изменение алгоритма, реализуемого программой, из-за невозможности воспроизвести использованные нюансы исходной вычислительной системы хотя бы потому, что программист мог и не знать обо всех использованных тонкостях аппаратуры по принципу "есть результат и ладно" (кстати, техническая документация может и не содержать описания всех тонкостей).

    Возникновения ситуаций с неопределенным поведением можно, а при разработке переносимых программ, безусловно, нужно избегать.

    Поведение, зависящее от реализации

    Каждая реализация должна описать поведение во всех ситуациях, перечисленных в этом разделе.

    Семантика фактических параметров функции main.

    Для облегчения переноса программы полезно локализовать обработку внешних аргументов.

    Число значащих начальных символов (сверх 31) в идентификаторе без внешней связи.

    В переносимой программе не используется свыше 31 значащего символа в идентификаторах без внешней связи.

    Число значащих начальных символов (сверх 6) в идентификаторе с внешней связью.




    - Начало -  - Назад -  - Вперед -