Часы реального времени DS3231 умерли?

Напомнило.

1 лайк

Это значит, что при указанной нумерации строк имеет место одна из четырех комбинаций:

  1. Дважды срабатывает строка 6.
  2. Дважды срабатывает строка 13.
  3. Сначала срабатывает строка 6, потом 13.
  4. Сначала срабатывает строка 13 потом 6.

Зачем Вы сделали на два разных варианта одинаковую диагностику?

Все в процессе. Исправляю по не многу то там то сям. Сложно мне было без процедур, пока не разобрался, что ту же функцию без аргумента можно использовать как процедуру. Может и не совсем правильно, но я привык их использовать.

В C++ функция и процедура - это одно и то же. Кстати, в Паскале тоже можно функции использовать как процедуры

в смысле?

В смысле, не обращая внимание на возвращаемое значение

function afunk(arg: boolean): boolean;

.......................

// обычно так
a := afunk(true);

// но и так не возбраняется
afunk(true);

ааа…
это да, там и так можно

function afunk(arg: boolean): boolean;

.......................

// обычно так
a := aFunk(true);

// но и так не возбраняется
aFunK(true);

вот не люблю я его за это, хотя юзаю дельфю.
по началу все искал какую нибудь опцию типа case sensitive, потом успокоился :grinning:

Ну вот. А я никак не привыкну, что после каждой строки нужно ставить “;”

  • точку с запятой, писать if с маленькой буквы, что нужна скобка в конце а не end if, что объявляя переменную не нужно писать “Dim” Понятно, что логика она везде одна и таже, а вот синтаксис…

В С++ вовсе нет процедур – просто не такого слова. Есть функции возвращающие пустые значения :slight_smile:

Вообще, появление столь уродливого разделения на функции и процедуры в Паскале – рудимент благостных идей структурастов – создателей этого языка. Это, кстати, весьма забавная история.

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

Но как это часто бывает у светлых идей идеального мира – они мало совместимы с жизнью. Например, в таком “идеальном мире” невозможно сделать функцию, которая, например, что-то выводит в файл и возвращает флаг “успешно / не успешно”. Нет, можно, конечно, сделать процедуру с параметром, передаваемом по ссылке, и вернуть результат через него, но … это ещё были “светлые идеалистические времена” и если бы тогда разработчикам Паскали сказали, что в нём в итоге будет передача по ссылке – они бы покрутили пальцем у виска и сказали бы: “только через наш труп – не для того мы создаём чистый структурный язык, чтобы тащить в него всякую дрянь с помойки”.

В результате компромиссов идеального мира с реальностью, Паскаль получился таким, каким получился: с “грязными функциями”, с передачей параметров по ссылке и даже, страшно сказать, с goto.

Ну, а разделение на функции и процедуры осталось в таком вот недоделанном виде - “на раскоряку”. Побочные эффекты разрешены везде. Вся разница только в том, что процедуры не возвращают значений (т.е. полностью эквивалентны void функциям в С/С++). Зато у них разный синтаксис объявления, который на кой-то хрен программисту надо знать. Напоминает анекдот: “И ради одной задницы …”. Не проще ли было оставить единый синтаксис, добавив специальный тип возвращаемого значения “ничего” (void) и не париться?

5 лайков

А зачем лишние сущности?

Вот и я говорю, зачем лишний синтаксис определения процедур, отличный от синтаксиса определения функций?

Видимо, исключительно для наглядности. Сишный синтаксис с непривычки кровь из глаз вызывает ))

1 лайк

Чем лишняя сущность “procedure” (или “subroutine”) хуже лишней сущности “void”?

Отдельной, ни для чего более неприменимой синтаксической конструкцией, в то время как void – всего лишь ключевое слово, используемой в качестве типа данных.

Ну нет такого типа данных!

Кстати, синтаксическая конструкция “function” тоже ни для чего более не применима. Давайте повыкидываем ВСЕ отдельные синтаксические конструкции, имеющие единственное применение.

В Вашей альтернативной вселенной может и нет, спорить не стану, а в С++ это один из фундаментальных типов данных.

ISO/IEC 14882:2020, § 6.8.2 «Fundamental types» (13)

A type cv void is an incomplete type that cannot be completed; such a type has an empty set of values. It is used as the return type for functions that do not return a value. Any expression can be explicitly converted to type cv void. An expression of type cv void shall be used only as an expression, as an operand of a comma expression, as a second or third operand of ?:, as the operand of typeid, noexcept, or decltype, as the expression in a return statement for a function with the return type cv void, or as the operand of an explicit conversion to type cv void.

Как-то так.

Выкидывайте - не возражаю.

Так, все-таки: возвращает функция значение или не возвращает? Как можно говорить о типе того, чего вообще нет?

Спойлер

Нет, все-таки логика программистов радикально отличается от логики всех остальных людей (возможно, кроме женской).

Да это у Вас какая-то странная логика. Любой тип характеризуется множеством допустимых значений – иногда, конечным (как int), иногда, бесконечным (как любой класс), а иногда - пустым (как void). Что не так?

Вот скажите, почему тип с пустым множеством значений Вас удивляет настолько, что Вы готовы отказать ему в высоком звании типа, а вот, например, процессор с пустым множеством команд (ZISC – Zero Instruction Set Computer) не смущает?

А с какой стати должен смущать, если совершенно очевидно, что процессоры с нулевым (ZISC) и отрицательным (NISC) множествами команд являются всего лишь частными случаями процессоров с комплексным (CISC) множеством команд?

Я думаю, нет я считаю, что все сообщения @ЕвгенийП и @andriano нужно в отдельную ветку вынести.
Потому что с одной стороны - интересно (наблюдать), с другой стороны не понятно причем тут 3231 ))