я и сравнивать не буду зато предложу сравнить, как получится у вас в сравнении с моими задачами, решаемыми при помощи sprintf: вывод на дисплей строк заранее неизвестной длины, начиная с заранее неизвестного символа, причем выводмые строки содержат в себе форматрированные числа в нужных местах. т.е. типичная задача для sprintf - получится у вас проще и экономнее?
предполагаю, что экономнее - да, вы добьётесь эффекта. но вот что будет проще - сомневаюсь да и времени потратите кучу. а для задачи в вашей формулировке стандартной функции и нету даже ну, если не считать memcpy при экзотическом подключении дисплея в адресное пространство МК
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Я работаю с символьными дисплеями Сравните на досуге, сколько памяти займет мой способ и с применением стандартных библиотек.
Я ни грамма не сомневаюсь, что функция, написанная компетентным программистом для решения узкоспециализированной задачи будет лучше, короче и оптимальнее, чем универсальная функция из стандартной библиотеки. Но тут нужна самая малость - компетентный программист. Коим начинающий ни разу не является.
Но тут нужна самая малость - компетентный программист. Коим начинающий ни разу не является.
а как стать начинающему компетентным программистом, если не учиться. Стандартные библиотеки это хорошо, но строку из двух символов, типа как хотел ТС, имхо сравнить не сложно if(buf[0]=='O') { if(buf[1]=='N') { TryLaLa(); } }
вы в своих программах тоже строки сравниваете приведеным вами методом?
Да подобным. В прошлом году сдано изделие на STM32F091 с 5 UARTами для работы во пожаро и взрывоопасных условиях , прошло сертификацию, испытания, уже несколько месяцев не выключаясь работает без нареканий у заказчиков. Думаете надо отзывать? Надо использовать стандартные библиотеки для безопасности?
Спасибо конечно всем. Ругаться не стоит. Вытаскивая по одному символу из массива я тоже считаю ни айс и это не правильно. А если в команде будет 5-8 символов? Это как будет выглядеть? If buf[0] if buf[1] и так пять символов сравнивать будем? Проще тогда уже работать просто с однобайтовыми командами чтоб не парится. Благо символов куча а значить и команд может быть много. Но я так не хочу. Вообще я решил что мои знания в С ещё не очень велеки. Посижу почитаю про строки и работу с ними. Всем спасибо. По результатам отпишусь, что и как сделал.
В прошлом году сдано изделие на STM32F091 для работы во пожаро и взрывоопасных условиях
Ну-ну, зачем жути нагонять? Работоспособность в пожаро-взрывобезопасных условиях определяется не программой, а правильным подбором комплектующих, схемотехникой и конструктивом. Некорректное программирование слабо связано с вышеперечисленными факторами.
Вытаскивая по одному символу из массива я тоже считаю ни айс и это не правильно.
стандартные функции думаете не так делают? Если строка длинная организуем цикл
Код:
/* ANSI sez: * The `strcmp' function compares the string pointed to by `s1' to the * string pointed to by `s2'. * The `strcmp' function returns an integer greater than, equal to, or less * than zero, according as the string pointed to by `s1' is greater than, * equal to, or less than the string pointed to by `s2'. [4.11.4.2] */ int strcmp(const char *s1, const char *s2) { for ( ; *s1 == *s2; s1++, s2++) if (*s1 == '\0') return 0; return ((*(unsigned char *)s1 < *(unsigned char *)s2) ? -1 : +1); }
В прошлом году сдано изделие на STM32F091 с 5 UARTами для работы во пожаро и взрывоопасных условиях , прошло сертификацию, испытания, уже несколько месяцев не выключаясь работает без нареканий у заказчиков.
oleg110592 писал(а):
Думаете надо отзывать? Надо использовать стандартные библиотеки для безопасности?
напомнило анекдот про Ваньку-дурачка, у которого х..й отрос до колена, а пользоваться им он так и не научился, только хвастался...
oleg110592 писал(а):
Если строка длинная организуем цикл
ведь можете же, когда захотите, не понятно, к чему Ванькой-дурачком прикидываться-то?
Добавлено after 1 minute 12 seconds: качественная программа != надежно работающая
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
согласен быть Ванькой да и просто дурачком, тока до колена - увы неверная информация, но хотелось бы очень знать почему нельзя без библиотек сравнивать строки.
Одно другому не противоречит. Длинная строка - парсим в цикле, гарантировано короткая ( например, команда) - для быстрой реакции можно и вышеприведенным способом. Вообще тут многое зависит от конкретных условий. Кстати, Сишный компилятор ( для ПК ) так и делает, принимая в стеке аргументы в подпрограмму, по-разному для: один - два - много параметров. СпойлерИ от вкусов . Когда я вынужден был по причине здоровья уходить из фирмы, мой "сменщик" начал поносить мой протокол : "Как у тебя слейв мастеру сообщает об ошибке ? " - "В эхо команды 7-й бит = 0, значит, ОК, 1- значит, ошибка" - "Неправильно! Должна выдавать строчку Error" - "А чем лишние 5 байт (при весьма напряженном трафике ) тут помогут ?" - "Так надо!" "Но ведь дивайс с дивайсом общается, а не с оператором через экран терминала! Дурак ты, братец!" -подумал я. Но не сказал. ARV, а тон полемики в этой ветке не характерен для Вас, не сочтите за критику.
_________________
Последний раз редактировалось Jack_A Вт янв 10, 2017 09:40:03, всего редактировалось 2 раз(а).
можно делать всё, как угодно. но лучше делать всё хорошо не так ли? 1. общепризнанные правила хорошего тона программирования гласят, что магические числа по коду - ПЛОХО. 2. т.к. все константы Си суть числа, 'A' и 'B' - это МАГИЧЕСКИЕ ЧИСЛА из п.1 и п.2 следует, что сравнение строк по буквам в коде - ПЛОХО.
такой код плохо поддается модификации, разбору и т.п. тем более нет смысла так писать, если компилятор сам так делает - пусть он и разбирается! тем более не следует демонстрировать такой код начинающему, который пока не готов отличать самостоятельно плохое от хорошего. советовать надо только хорошее - плохому он научится и без вас/нас
какая-такая "быстрая реакция" должна заставить вас писать плохой код? смириться с этим можно разве что при катастрофической нехватке памяти, когда никакие иные средства, кроме перехода на ассемблер, уже не помогают. и не надо мне рассказывать, что в STM32 не хватает памяти/быстродействия, чтобы писать нормальный код!
не надо так!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
интересный подход - читал, вроде когда в кавычках 'O' или 'N', это символы (но не магические числа) и компилятор сам превращает в магические числа, которые в листинге иногда можно посмотреть. Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:3 Медали: 1
Похоже, опять придётся тему разделять ? Лучше бы ТС'у советом помогли, вместо очередного срача в теме с мерениями органов. По мне, так я бы, для сравнения всего 2-ух байтов, тоже поставил 2 условия, т.к. делать для этого цикл - глупо в любом случае и со всех сторон. И никто мне не докажет обратное. Каждый былокодит так, как хочет. Так что, давайте не будем флудить в темах, выдавая своё мнение за истинное.
Добавлено after 2 minutes 42 seconds:
oleg110592 писал(а):
Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
И я не знал. Тоже теперь буду знать и стараться символы в код не добавлять, а заменять их на числа в их ASCII-представлении
Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
из трех - не благодарите
Аlex писал(а):
Каждый былокодит так, как хочет.
когда у вас спрашивают совета, надеются, что вы умеете и знаете больше, чем вопрошающий, и делаете лучше, чем он. а если вы быдлокодите - то сразу следует предупредить, что ваши советы - быдлокодерские. я бы не стал слушать таких советов.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Хорошо, уберём эту вамглазамазолящую приставку и оставим только слово "кодит" Смысл моего предложения от этого не изменится. ARV, при всём моём к Вам уважении, осмелюсь озвучить мнение в Вашу сторону. Последнее время, у меня складывается впечатление, что Вы ходите по форуму только в поисках фраз (слов, предложений), за которые можно зацепиться и, поспорив, попытаться показать себя грамотнее тех, кто их озвучил. Зачем это всё ? Ну высказал кто-то своё мнение, и что ? Зачем на весь форум кричать, что оно ошибочное ? При том, что оно вполне имеет право на жизнь. Вам не приходило никогда в голову, что это мнение могут разделять и другие, коих Вы своими совами тоже огорчаете ? Причём, выставляя себя на посмешище со стороны. Очень надеюсь, что моё впечатление ошибочно и Вам просто не хватает общения, либо Вы в этих спорах ищите какую-нибудь правду. Ну или ещё что-нибудь...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения