LINUX.ORG.RU

История изменений

Исправление watchcat382, (текущая версия) :

Так значения ставки НДС и есть значения одного типа. В который входят значения, представляемые неотрицательными числами и одно значение, представляемое строкой. А Аде для хранения этих значений была бы вариантная запись.

Да, согласен. Если такой странный тип объявлен то для него может быть определена и операция сравнения(и другие). Именно сущностей ОДНОГО ТИПА,вот этого.

Насколько реализация алгоритма вычисления НДС с использованием вариантной записи соответствует «хорошим практикам» программирования - вопрос спорный,но она хотябы корректна потому что для нее объявлен специальный тип и для этого типа определены операции с ним.

В целях объективности тут следовало бы произвести тестирование скорости исполнения разных реализаций алгоритма НДС - как с вариантной записьмю так и с использованием числового типа и значения -1 в качестве аналога «БезНДС». Насколько я вижу, чаще используются именно числовые значение вне диапазона - минус единица,иногда другие. Например системные вызовы так сделаны. Вызов read() возвращает число прочитанных байтов,ноль если конец файла и -1 при ошибке. Это вполне классическая традиционная практика,которая встречается настолько часто что ее можно считать общепринятой.

А вот в процитированном примере 1С - я вижу сравнение типа «Ставка НДС» с типом «строка». Что и выглядит некорректно,потому что определения типа «Ставка НДС» небыло.

К какому приводить

В том-то и дело что непонятно к какому если специальный тип в виде вариантной записи например - не определен. Разве что к строковому и тогда хранить все числа как строки,что скорее всего не эффективно.

функция mbrtoc32

Посмотрел тут: https://en.cppreference.com/w/cpp/string/multibyte/mbrtoc32 Написано что она возвращает при ошибках отрицательные значения. Но вы таки правы - объявлена она как возвращающая значение типа size_t,а это беззнаковый тип. И я бы это назвал плохой реализацией,в отличие от того же read() который возвращает ssize_t, знаковый тип,и там отрицательные значения,используемые для кодов ошибок,будут именно отрицательными.

Интересно - почему mbrtoc32 объявили как возвращающую беззнаковый тип? А если уж так объявили то не надо было использовать отрицательные значения в качестве кодов ошибок.

Благодарю за пример интересного казуса.

Исходная версия watchcat382, :

Так значения ставки НДС и есть значения одного типа. В который входят значения, представляемые неотрицательными числами и одно значение, представляемое строкой. А Аде для хранения этих значений была бы вариантная запись.

Да, согласен. Если такой странный тип объявлен то для него может быть определена и операция сравнения(и другие). Именно сущностей ОДНОГО ТИПА,вот этого.

Насколько реализация алгоритма вычисления НДС с использованием вариантной записи соответствует «хорошим практикам» программирования - вопрос спорный,но она хотябы корректна потому что для нее объявлен специальный тип и для этого типа определены операции с ним.

В целях объективности тут следовало бы произвести тестирование скорости исполнения разных реализаций алгоритма НДС - как с вариантной записьмю так и с использованием числового типа и значения -1 в качестве аналога «БезНДС». Насколько я вижу, чаще используются именно числовые значение вне диапазона - минус единица,иногда другие. Например системные вызовы так сделаны. Вызов read() возвращает число прочитанных байтов,ноль если конец файла и -1 при ошибке. Это вполне классическая традиционная практика,которая встречается настолько часто что ее можно считать общепринятой.

А вот в процитированном примере 1С - я вижу сравнение типа «Ставка НДС» с типом «строка». Что и выглядит некорректно,потому что определения типа «Ставка НДС» небыло.

К какому приводить

В том-то и дело что непонятно к какому если специальный тип в виде вариантной записи например - не определен. Разве что к строковому и тогда хранить все числа как строки,что скорее всего не эффективно.

функция mbrtoc32 Посмотрел тут: https://en.cppreference.com/w/cpp/string/multibyte/mbrtoc32 Написано что она возвращает при ошибках отрицательные значения. Но вы таки правы - объявлена она как возвращающая значение типа size_t,а это беззнаковый тип. И я бы это назвал плохой реализацией,в отличие от того же read() который возвращает ssize_t, знаковый тип,и там отрицательные значения,используемые для кодов ошибок,будут именно отрицательными.

Интересно - почему mbrtoc32 объявили как возвращающую беззнаковый тип? А если уж так объявили то не надо было использовать отрицательные значения в качестве кодов ошибок.

Благодарю за пример интересного казуса.