-
- PS А почему аду не хотите? Что вас смущает то. для армов есть, есть даже русскоязычный бложик там на примере ST cortex M4 разобрано применение ады. Я кстати тоже ее хочу. Но на все времени не хватает. - RED_DRAGON(03.11.2017 22:23)
- 1. В С++ сделать это можно lloyd(627 знак., 03.11.2017 11:08)
- Имеет смысл перейти к float point, точно. И хранить в системе СИ. - fk0(03.11.2017 11:18)
- Насколько я понял, ТСу надо не "км" с "нм" складывать, а при умножении "ом" на "ампер" получать "вольты". - Ale3000(03.11.2017 11:16)
- я про то, что теми литералами можно объявлять структуры. lloyd(231 знак., 03.11.2017 11:38)
- Да сделать-то можно, но фигли толку, он в самой формуле напутает и не то получит и не заметит. - fk0(03.11.2017 11:19)
- замечу, что "физсущности" часто расматриваются как данные по соответствующим каналам преобразования , из чего следует наличие дополнительной информации о достоверности этих данных (статус, время последнего обновления и т.п.). наборы основных и Vit(367 знак., 03.11.2017 09:59 - 10:07, ссылка)
- мисра обязательно выскажется против :)) - Царская Морда(03.11.2017 10:17)
- Я почитал немного эту MISRA и берусь утверждать, что она уже просто расходится с нормальными практиками программирования. Я бы вместо мисры рекомендовал Роба Пайка "Практику программирования" почитать. - fk0(03.11.2017 10:58)
- это потому что 42?:) если знаете, ткните, плз, что ей гарантированно должно не нравиться - самому интересно, но лень. Vit(267 знак., 03.11.2017 10:32 - 10:56)
- мисра обязательно выскажется против :)) - Царская Морда(03.11.2017 10:17)
- Если честно, я задачу не понимаю. Просто контроль присвоения можно решить добавлением префикса в имя переменных или констант и статическим анализом исходников на наличие правильных префиксов. Но есть же еще расчеты с конверсией типов? - VLLV(03.11.2017 09:51)
- Может какие lint-ы или другие проверяльщики кода такое умеют. Тут недавно обсуждали. - AlexBi_(03.11.2017 09:39, )
- +Сделай свои ассерты на контроль входных параметров функции, аргументами которой будут пользовательские типы данных - Любитель_Радио(03.11.2017 07:16, )
- Ассерт очень тонкая вещь. Ты, представь, ракету в космос запускаешь. И у тебя сработал ассерт в какой-то малозначительной функции, в малозначительном модуле. А упадёт из-за этого вся ракета. Иногда ошибки в программе лучше обрабатывать каким-то fk0(124 знак., 03.11.2017 11:00)
- Поэтому ассерт устроен вот так: #ifdef NDEBUG #define assert(x) // nothing - SciFi(03.11.2017 11:06)
- статик ассерт? - VLLV(03.11.2017 11:04)
- а static_assert работает только на constexpr-выражениях, что несколько проблематично в реальном коде - lloyd(03.11.2017 11:10)
- вот, уже здравое зерно есть в обсуждении! Вполне применимо. michas(104 знак., 03.11.2017 08:52 - 09:19)
- добавь в структуру пользовательского типа "поле типа" через enum - будет что-то вида строгой типизации - Любитель_Радио(03.11.2017 09:46, )
- Не плоди сущности сверх необходимых. Такая конструкция вызовет 10-кратное усложнение кода и внесение своих ошибок. Которых может быть куда больше, чем перепутанные типы данных. - fk0(03.11.2017 11:01)
- ну уж прям 10-кратное)) а так - всё зависит от постановки задачи. ТС в общем виде описал проблему - в общем виде и решение - Любитель_Радио(03.11.2017 11:43, )
- Не плоди сущности сверх необходимых. Такая конструкция вызовет 10-кратное усложнение кода и внесение своих ошибок. Которых может быть куда больше, чем перепутанные типы данных. - fk0(03.11.2017 11:01)
- Не "может", "должен". - Скрипач(03.11.2017 09:22)
- ...периода выполнения? И ждать пока соответствующая ветвь кода выполниться? Может проще на Паскаль перейти? Там строгая типизация - свойство языка. - Скрипач(03.11.2017 09:00)
- Ну хоть какая проверка. Иногда напрягает что не помнишь в вольтах или миливольтах, градусах или дециградусах. С плавучкой в этой части проще конечно. michas(104 знак., 03.11.2017 09:04 - 09:10)
- Я тебе предлагал к имени переменной добавлять суффикс. Не дебильную венгерскую нотацию, где префикс (и поэтому нет автодополнения, и ты всегда должен заранее знать префикс), и где в префиксе закодирован машинный тип данных (его компилятор и без fk0(315 знак., 03.11.2017 11:03)
- Понятно. - michas(03.11.2017 11:33)
- А не слишком ли преувеличена проблема? Вольты и миливольты? Два масштаба несложно отследить, больше... на практике, не встречал. - Скрипач(03.11.2017 09:21)
- проблема... В целочисленной арифметике приходится и три-четыре единицы одной и той же величины использовать, чтобы в диапазон вогнать и время вычислений оптимизировать. - VLLV(03.11.2017 11:07)
- Человек в милли- и кило- запутался, а вы ещё предлагаете всё это считать в целых числах и подгонять диапазоны. У поциента мозг взорвётся! - SciFi(03.11.2017 11:09)
- т.е. мы про абстрактное, а не реальное программирование мусолим? - VLLV(03.11.2017 11:12)
- float - тоже реальное программирование. Сейчас копеечные МК умеют делать его аппаратно. Да и на тихоходных МК использовать софтовый float оч. часто полезно. Далеко не всегда нужно выжимать из проца последний такт и байт. - SciFi(03.11.2017 11:23)
- Ну не работает мой алгоритм на float, я от сохи, я к своим проектам все примеряю. - VLLV(03.11.2017 16:25)
- Имел случай, когда на pic18 с hitech-c компилятором (не PRO-версии, в PRO нет той библиотеки, оптимизированной руками на ассемблере) вычисления написанные на float оказались быстрей целочисленного варианта. Объяснение простое: целочисленный был fk0(337 знак., 03.11.2017 11:29)
- так они не на float написаны. float в IEEE754 подразумевается 24-х битный. те вычисления были написаны на скажем pic-float. стоит таки различать такие сущности. - Mahagam(03.11.2017 15:35)
- Не надо занудничать. Точка плавает? Плавает. Значит float. - SciFi(03.11.2017 15:36)
- маркетологи покусали? да? ))) - Mahagam(03.11.2017 15:39)
- Не надо занудничать. Точка плавает? Плавает. Значит float. - SciFi(03.11.2017 15:36)
- так они не на float написаны. float в IEEE754 подразумевается 24-х битный. те вычисления были написаны на скажем pic-float. стоит таки различать такие сущности. - Mahagam(03.11.2017 15:35)
- float - тоже реальное программирование. Сейчас копеечные МК умеют делать его аппаратно. Да и на тихоходных МК использовать софтовый float оч. часто полезно. Далеко не всегда нужно выжимать из проца последний такт и байт. - SciFi(03.11.2017 11:23)
- т.е. мы про абстрактное, а не реальное программирование мусолим? - VLLV(03.11.2017 11:12)
- Человек в милли- и кило- запутался, а вы ещё предлагаете всё это считать в целых числах и подгонять диапазоны. У поциента мозг взорвётся! - SciFi(03.11.2017 11:09)
- Да не проблема. Это у США с госдолгом проблема, а я про средства и методы разработки спрашиваю :). C масштабами справляюсь. Вот ассертами раньше не пользовался, теперь иногда пользуюсь где удобно. Может и из typedef что нибудь полезное можно michas(9 знак., 03.11.2017 09:25)
- Лемма: там где можно поставить assert, можно поставить внятную обработку ошибки. Assert хорош когда работаешь с двумя сборками: отладочной и "боевой". Но сама по себе "двойная работа" таит в себе кучу разных засад. - Скрипач(03.11.2017 09:45)
- Про ассерт вообще не нужно думать есть он или нет. Он может быть, а может не быть. В любой сборке. Глупо в боевой отказаваться от обработки ошибой, равно как глупо полагаться на то, что записанное внутри ассерта выполняется. Вообще нормальные люди fk0(70 знак., 03.11.2017 11:05)
- Еще раз повторяю - вместо вывешивания или перезагрузки системы при помощи ассерта можно вырулить прибор в нормальное состояние с учетом контекста. Скрипач(120 знак., 03.11.2017 21:45)
- Про ассерт вообще не нужно думать есть он или нет. Он может быть, а может не быть. В любой сборке. Глупо в боевой отказаваться от обработки ошибой, равно как глупо полагаться на то, что записанное внутри ассерта выполняется. Вообще нормальные люди fk0(70 знак., 03.11.2017 11:05)
- Лемма: там где можно поставить assert, можно поставить внятную обработку ошибки. Assert хорош когда работаешь с двумя сборками: отладочной и "боевой". Но сама по себе "двойная работа" таит в себе кучу разных засад. - Скрипач(03.11.2017 09:45)
- проблема... В целочисленной арифметике приходится и три-четыре единицы одной и той же величины использовать, чтобы в диапазон вогнать и время вычислений оптимизировать. - VLLV(03.11.2017 11:07)
- Посмотри Паскаль. Ада - слишком "академична", нужны аргументы чтобы на ней писать. - Скрипач(03.11.2017 09:11)
- Смысла нет, лекарство хуже болезни. Си пока абсолютно устраивает. Ума вот нет, паскаль не поправит. - michas(03.11.2017 09:26)
- Если "многообразие типов" действительно велико, то не грех и сменить язык. Но раз это "академический интерес" то понятно. - Скрипач(03.11.2017 09:51)
- не совсем так. всё, что требует решения в терминах целевой задачи, может быть вынесено в отдельный слой. и в последующем оттранслировано в плейнси для компиляции. Царская Морда(136 знак., 03.11.2017 09:33, ссылка)
- Смысла нет, лекарство хуже болезни. Си пока абсолютно устраивает. Ума вот нет, паскаль не поправит. - michas(03.11.2017 09:26)
- Бывалые предлагали приписывать к имени переменной единицы измерения. Ну и добудьте наконец нормальный текстовый редактор, который умеет парсить сишный код и делать удобную навигацию по переменным, функциям, типам. - SciFi(03.11.2017 09:08)
- Кейл-лайт не такой? - michas(03.11.2017 09:09)
- Есть два редактора -- Vim и Emacs. Если не осилил ни один, то пользуйся NetBeans или Eclipse (для очень больших проектов только второй). На совсем худой конец -- Visual Studio. - fk0(03.11.2017 11:07)
- Понятия не имею. Давным-давно пользовался редактором кейла. Вроде бы там какая-то навигация была, но не помню, насколько вменяемая. Пользую Source Insight. Понравился редактор в Eclipse, но я так и не врубился, как в этой эклипсе настройки SciFi(34 знак., 03.11.2017 09:11)
- Кейл-лайт не такой? - michas(03.11.2017 09:09)
- Я тебе предлагал к имени переменной добавлять суффикс. Не дебильную венгерскую нотацию, где префикс (и поэтому нет автодополнения, и ты всегда должен заранее знать префикс), и где в префиксе закодирован машинный тип данных (его компилятор и без fk0(315 знак., 03.11.2017 11:03)
- Ну хоть какая проверка. Иногда напрягает что не помнишь в вольтах или миливольтах, градусах или дециградусах. С плавучкой в этой части проще конечно. michas(104 знак., 03.11.2017 09:04 - 09:10)
- добавь в структуру пользовательского типа "поле типа" через enum - будет что-то вида строгой типизации - Любитель_Радио(03.11.2017 09:46, )
- Ассерт очень тонкая вещь. Ты, представь, ракету в космос запускаешь. И у тебя сработал ассерт в какой-то малозначительной функции, в малозначительном модуле. А упадёт из-за этого вся ракета. Иногда ошибки в программе лучше обрабатывать каким-то fk0(124 знак., 03.11.2017 11:00)
- В C++ относительно просто. В C++ -- арифметические операции переопределить нельзя, придётся писать набор функций для любых вычислений. Как -- просто. Каждый тип -- отдельная структура (даже если с одним интом внутри) отдельного типа. Только fk0(454 знак., 02.11.2017 23:53)
- Позвольте не согласиться... edward_sh(148 знак., 03.11.2017 10:43)
- Я про C. В C++ можно, но овчинка не стоит выделки. И массу побочных проблем создашь ещё. - fk0(03.11.2017 10:56)
- Позвольте не согласиться... edward_sh(148 знак., 03.11.2017 10:43)
- Может вам с такими пожеланиями в Ada податься :) - RED_DRAGON(02.11.2017 22:24)
- Этот вопрос прямо возник после чтения про Ада. Простота решения просто поразила. Не меньше поразило то что в Си есть создание своих типов. Но мне никогда не попадалось, зачем это надо. Ну я и вообразил что можно использовать не свои типы а свои michas(25 знак., 03.11.2017 08:50)
- typedef - это не создание типа, а создание псевдонима для существующего типа, обычно для сокращения. Скажем, хитровывернутый указатель на функцию с аргументами в виде других указателей на функции лучше сократить. - SciFi(03.11.2017 08:55)
- Структура -- вполне отдельный тип. Другое дело, в C для них нельзя операторы перегрузить. - fk0(03.11.2017 11:10)
- Ну да, правильно. Это все в книгах описано. Но я чувствую недосказанность. Си вообще лаконичный язык, может еще какой полезный функционал именно в прикладном смысле имеет, не как трюк программирования? - michas(03.11.2017 09:07)
- Вы стоите на развилке, принципиальной для языков программирования, как категории. Строгая типизация. Си, и большинство последовавших за ним языков, на этой развилке свернули влево. Вы - смотрите вправо. - Скрипач(03.11.2017 09:15)
- Про типизацию языков ознакомился. У меня за соседним столом любитель TCL сидит, так он наоборот считает достоинством сношение всего скопом. - michas(03.11.2017 09:28)
- В Tcl арифметика вообще через отдельную функцию expr сделана и никаких своих типов там быть не может. И синтаксис языка не позволит написать свои a + b. Позволит написать [+ a b] а-ля лисп, но это не читаемый код, оно годится для некого fk0(85 знак., 03.11.2017 11:12)
- В Tcl столько ОО расширений ->, что не удивлюсь, если там что-то подходящее найдется. - Evgeny_CD(03.11.2017 13:06, ссылка)
- Ко всему-то подлец-человек привыкает! (ФМ) Я видел, как человек, весьма далёкий от программирования, стал писать довольно большие программы на Форте. Вот прямо с фортовской обратной польской записью. - йцукен(03.11.2017 12:29)
- В Tcl арифметика вообще через отдельную функцию expr сделана и никаких своих типов там быть не может. И синтаксис языка не позволит написать свои a + b. Позволит написать [+ a b] а-ля лисп, но это не читаемый код, оно годится для некого fk0(85 знак., 03.11.2017 11:12)
- Про типизацию языков ознакомился. У меня за соседним столом любитель TCL сидит, так он наоборот считает достоинством сношение всего скопом. - michas(03.11.2017 09:28)
- Может и имеет. Но телепаты ушли на выходные на день раньше положенного. - SciFi(03.11.2017 09:09)
- Ну тогда давай про гейропку поговорим. - michas(03.11.2017 09:18)
- Вы стоите на развилке, принципиальной для языков программирования, как категории. Строгая типизация. Си, и большинство последовавших за ним языков, на этой развилке свернули влево. Вы - смотрите вправо. - Скрипач(03.11.2017 09:15)
- typedef - это не создание типа, а создание псевдонима для существующего типа, обычно для сокращения. Скажем, хитровывернутый указатель на функцию с аргументами в виде других указателей на функции лучше сократить. - SciFi(03.11.2017 08:55)
- Одну букву обрежь - и фраза станет правильной! :) - Evgeny_CD(02.11.2017 22:25)
- У Gnu есть компилятор ADA. Точнее надстройка над компилятором. По идее должен много где идти. - Скрипач(02.11.2017 22:32, ссылка)
- А то там насчет такой типизации в Rust, Go и прочих Scala? - Evgeny_CD(02.11.2017 22:34)
- в *опу их нахрен (скромное имхо) - RED_DRAGON(02.11.2017 22:38)
- Зря. Rust пилят для Cortex-M и даже для AVR. - Evgeny_CD(02.11.2017 23:29)
- Безумству храбрых поём мы песню! - SciFi(02.11.2017 23:35)
- Изучать - одно, использовать в серии - другое. - Evgeny_CD(02.11.2017 23:41)
- Тут в пустыне с пеной у рта обсуждают прибавление к регистру единицы (пардон за утрирование, но недалеко от истины), а тут типа язык с гарантиями какой-то там безопасности. Поищи аудиторию в другом месте. - SciFi(02.11.2017 23:50)
- Какие в жопу гарантии, когда он размерности напутает или в формуле ошибку сделает? Фортран самодостаточен -- ТОЧКА. Нужно лишь комментарии в коде писать и иногда, может быть, разумно называть переменные. Хотя I, J, K, L, M, N тоже вариант -- чаще fk0(34 знак., 02.11.2017 23:55)
- А мне местная аудитория нравится. Совмещать несовместимое - это моя главная фишка. Здесь люди имеют практический опыт, их критика бесценна для меня. - Evgeny_CD(02.11.2017 23:53)
- Тут в пустыне с пеной у рта обсуждают прибавление к регистру единицы (пардон за утрирование, но недалеко от истины), а тут типа язык с гарантиями какой-то там безопасности. Поищи аудиторию в другом месте. - SciFi(02.11.2017 23:50)
- Изучать - одно, использовать в серии - другое. - Evgeny_CD(02.11.2017 23:41)
- Безумству храбрых поём мы песню! - SciFi(02.11.2017 23:35)
- Зря. Rust пилят для Cortex-M и даже для AVR. - Evgeny_CD(02.11.2017 23:29)
- Да, и еще Kotlin! -> --> - Evgeny_CD(02.11.2017 22:36, ссылка, ссылка)
- Не в курсе. С Адой - баловался, перечисленное вами - вообще не смотрел. - Скрипач(02.11.2017 22:36)
- в *опу их нахрен (скромное имхо) - RED_DRAGON(02.11.2017 22:38)
- А то там насчет такой типизации в Rust, Go и прочих Scala? - Evgeny_CD(02.11.2017 22:34)
- :D она девочка (Ада) - RED_DRAGON(02.11.2017 22:32)
- У Gnu есть компилятор ADA. Точнее надстройка над компилятором. По идее должен много где идти. - Скрипач(02.11.2017 22:32, ссылка)
- Этот вопрос прямо возник после чтения про Ада. Простота решения просто поразила. Не меньше поразило то что в Си есть создание своих типов. Но мне никогда не попадалось, зачем это надо. Ну я и вообразил что можно использовать не свои типы а свои michas(25 знак., 03.11.2017 08:50)
- Скрипач, остатками сознания, проявляет возможность мыслить как Русский Человек. Я бы тоже так сделал, объявил тип "физическая величина", и написал соответствующие функции IBAH(432 знак., 02.11.2017 08:39 - 08:48)
- дай бох памяти - такое можно было только на паскале. там да. назвал икс месяцем и игрек днем и только с ними и можно оперировать. - LordN(01.11.2017 20:38)
- Создать так свои типы можно, только Си типы не контролирует, а потому все равно позволит подставить в аргумент функции altitude вместо pressure :), если численно они конвертируемы. И только C++ станет ругаться, когда подстановка возможна, но типы Ксения(8 знак., 01.11.2017 18:25 - 19:10)
- А так? _basile(216 знак., 01.11.2017 20:29, )
- (c) Скрипач -> - Evgeny_CD(01.11.2017 20:31, ссылка)
- Применение слова "стандартные", без ссылки на стандарт, указывают сразу на долбоеба. - _basile(03.11.2017 12:58, )
- Зануда, блеать. Операторы же! - SciFi(03.11.2017 13:02)
- Применение слова "стандартные", без ссылки на стандарт, указывают сразу на долбоеба. - _basile(03.11.2017 12:58, )
- (c) Скрипач -> - Evgeny_CD(01.11.2017 20:31, ссылка)
- Все понятно. Это меня и интересовало. - michas(01.11.2017 18:54)
- А так? _basile(216 знак., 01.11.2017 20:29, )
- Да, с пол-оборота на Си. Высота и давление всего - лишь unsingned int. Я так понял, это авиация. _basile(287 знак., 01.11.2017 19:04, )
- Вот!!! Вот такие любители unsingned и писали ПО для F-22 и F-35. Какой-то из них при первом пересечении экватора перевернулся брюхом вверх - навигационная система отрабатывала изменившийся знак широты. - Evgeny_CD(01.11.2017 20:41)
- Высота над уровнем моря, или давление отрицательное - это зведец. Эта вся хрень, как я понял, для вывода на приборы, ну, теперь уж на дисплей. И хули те разница, если у тя ВВП ниже уровня моря хоть на 100 метров, а прибор застыл на нуле ? _basile(103 знак., 01.11.2017 21:06, )
- достаточно низэнько так над ним пролететь. был же случай. - Alex68(01.11.2017 21:46)
- Да ладно. Кто-то что-то там с3,14здил ярдов на -надцать, а крайним назначили быдлокодера. - SciFi(02.11.2017 08:49)
- Расскажи это на астраханском аэродроме Приволжский... - Дошик(01.11.2017 21:20, )
- достаточно низэнько так над ним пролететь. был же случай. - Alex68(01.11.2017 21:46)
- а еще мертвое море ниже уровня океана - Alex68(01.11.2017 20:50)
- Это ваще ППЦ - древняя диверсия КГБ, которое закошмарило древних укров, и они углубили мертвое море... - Evgeny_CD(01.11.2017 20:53)
- базиль - вражеский засланец, православных инженеров с пути сбивает - POV_(01.11.2017 20:47, )
- Высота над уровнем моря, или давление отрицательное - это зведец. Эта вся хрень, как я понял, для вывода на приборы, ну, теперь уж на дисплей. И хули те разница, если у тя ВВП ниже уровня моря хоть на 100 метров, а прибор застыл на нуле ? _basile(103 знак., 01.11.2017 21:06, )
- Вот!!! Вот такие любители unsingned и писали ПО для F-22 и F-35. Какой-то из них при первом пересечении экватора перевернулся брюхом вверх - навигационная система отрабатывала изменившийся знак широты. - Evgeny_CD(01.11.2017 20:41)
- Нет, не можешь. Либо придется отказаться от ВСЕХ стандартных арифметических операций. Описать все как struct и написать свои функции работы с ними. - Скрипач(01.11.2017 18:20)
- Если я правильно понял задачу, для неё есть готовое решение в C++. Боюсь, под голым Си не получится. - йцукен(01.11.2017 18:00, ссылка)