Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Разбираюсь с одним модулем. Под него есть готовые библиотеки. Наткнулся на такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. онии продвигают указатель pData += 2; но данные кладут всегда в начальные индексы pData[0] = tmp[0]; pData[1] = tmp[1]; я что то не понимаю? по моему должно быть так *pData++ = tmp[0]; *pData++ = tmp[1]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 10:27 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:00 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция. pData += 2; не равно pData++; pData++; ? array[index] - указывает на абсолютный адрес (?) если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:05 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 pData += 2; не равно pData++; pData++; ? Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:15 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
crutchmasterЯдро что-ли? amazon-freertos-optiga-trust ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:17 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 pData += 2; не равно pData++; pData++; ? Я сказал - "одна лишняя операции".array[index] - указывает на абсолютный адрес (?)Нет в Це Pascal-евых массивов. Есть разные формы адресной арифметики.если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2].Есть массив переменных. Можно взять указатель на начало массива и получать нужный элемент, используя индекс. Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:18 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
crutchmaster jenya7 pData += 2; не равно pData++; pData++; ? Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли? int i = 0; i+=2; результат 2. int i = 0; i++; i++; результат 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:22 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Можно взять указатель на начало массива и получать нужный элемент, используя индекс. Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно. если это так то это серьезный фак в С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:24 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 если это так то это серьезный фак в С Нет. Жонглирование указателями, гексогеном и острыми бритвами, крутя педали одноколёсного велосипеда - обычная практика в разработке на си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:41 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7, Одна операция, результат - 2 Две операции, результат - 2 Если нет разницы, то зачем делать больше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 11:43 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 онии продвигают указатель pData += 2; но данные кладут всегда в начальные индексы pData[0] = tmp[0]; pData[1] = tmp[1]; я что то не понимаю? по моему должно быть так *pData++ = tmp[0]; *pData++ = tmp[1]; это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 12:25 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T, Это не дело вкуса. Во втором варианте на операцию больше будет жи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 12:38 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
crutchmaster Dima T, Это не дело вкуса. Во втором варианте на операцию больше будет жи! Не факт, надо код после компиляции смотреть. +=2 это сложение, а ++ это инкремент, второе легче в выполнении и короче записывается. Да и оптимизатор проца скорее всего запараллелит выполнение двух ++, т.е. в итоге получим примерно одно и тоже по производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 12:46 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
я может чего не понимаю, но зачем здесь tmp? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 12:48 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
[quot Dima T#22074549] jenya7 онии продвигают указатель это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант. исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 13:42 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T Да и оптимизатор проца скорее всего запараллелит выполнение двух ++ Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно. jenya7 исходный вариант как минимум путает Только слабых на голову. Но таким в области низкоуровневой оптимизации делать нечего. Таки да, первый код работает заметно быстрее второго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 14:58 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Dima T Да и оптимизатор проца скорее всего запараллелит выполнение двух ++ Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно. это может сделать оптимизатор компилятора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:08 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Имя пользователя1 ...но зачем... код мутный, от слова совсем. 1) есть закос на различия по платформе и дохлые компиляторы 2) нарушена общая логика в решении 3) не однозначное поведение алгоритма индусский код одним словом... (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:09 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Изопропил Dimitry Sibiryakov пропущено... Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно. это может сделать оптимизатор компилятора если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:44 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
А зачем там таймаут. Я полагаю можно переписать так и смысл тот-же. +1 к tmp. Тоже убрал. Лишние скобАчки убрал. Задлянафига нам скобАчки? +Egyptian-style bracers. Я делаю это машинально. (Сорян привыкли руки к топорам). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И гдеж тот господин который рекламировал PVS. Когда он нужен - его нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 18:28 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :) По мне так все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже, ИМХО первая запись красивее, т.е. читабельнее, но могут быть применены обе, это не должно путать. PS Считающие что быстрее pData+=2 учтите этот неявный +1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 18:44 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Честно я-бы забил. Я чем больше смотрю на процесс разработки - тем больше уверен что correctness - важнее чем гипотетический и недоказанный performance. Главное - написать код без ошибок. Код который работает правильно. А оптимизации уже пойдут потом. Кроме того интеллект компиллеров шибко крепчает и они спокойно распознают много-ходовки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 18:52 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
И надо еще посмотреть какие коды ошибок возвращает HAL_SPI_Receive_IT() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 19:55 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
полудух если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы. а должен ли? на интеле например, давно уже i++ транслируется в ADD r,1 а не INC r зачем мешать оптитимизатору? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 20:01 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Я-бы переписал такой код. Код: plaintext 1. Здесь - неочевидна арифметика числовых интервалов. Ну... не в данном коде а вообще в принципе. Типа Код: java 1. Если есть возможность объединять предикаты там строгое неравенство соединить с равенством нулю - то ябы сокращал количество предикатов. Опять же. Не в данном коде а вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 20:21 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton Я-бы переписал такой код. Код: plaintext 1. Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 20:48 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже точнее даже так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 20:49 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
полудух, это толсто. Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны. Можно было сразу вводить новый оператор и не мучать бедный математический плюс "+". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 20:59 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton полудух, это толсто. Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:04 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
ещё из необычного: Код: plaintext 1. 2. это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:08 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Имя пользователя1 mayton полудух, это толсто. Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны. Я даже боюсь представить каково это было.... "раньше". Код-троллинг... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:09 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
полудух Dima T все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже точнее даже так: Код: plaintext 1. Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:13 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:15 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Имя пользователя1 ещё из необычного: Код: plaintext 1. 2. это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:20 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton, подумай над || !len ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:22 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T mayton Я-бы переписал такой код. Код: plaintext 1. Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи. Заметил, но стерпел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:27 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T полудух пропущено... точнее даже так: Код: plaintext 1. Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ. Это легасм С. Не забываем что С - это ещё почти ассемблер, следующий шаг за MACRO11. С этой точки зрения какие бы регистры не суммировались результирующий указатель будет в регистре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:32 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T Имя пользователя1 ещё из необычного: Код: plaintext 1. 2. это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений? Это равносильно Код: plaintext 1. тоесть this будет null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:36 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Изопропил Dima T пропущено... Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи. Заметил, но стерпел. Ну колитесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:37 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
OoCc Dima T пропущено... Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений? Это равносильно Код: plaintext 1. тоесть this будет null если метод не виртуальный, то его адрес известен на момент компиляции и компилятор именно так и переписывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:43 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton Изопропил пропущено... Заметил, но стерпел. Ну колитесь. Разверни || !len к обычному условию и все поймешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:46 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
jenya7 я что то не понимаю? по моему должно быть так *pData++ = tmp[0]; *pData++ = tmp[1]; По-моему, должно быть примерно так: Код: c Но как человек, не писавший на C с 97-го года, могу и ошибиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:49 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
OoCc Dima T пропущено... Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений? Это равносильно Код: plaintext 1. тоесть this будет null а внутри будет обращение к свойствам, т.е. чтение по по адресу this+N, где N от 0 до ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:49 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton, если len==0 ,то вызывается HAL_SPI_Receive_IT без проверки переполнения буфера ХЗ, может в этом случае гарантируется, что размер буфера достаточен для получения всех данных, WIFI_IS_CMDDATA_READY() рано или поздно скажет, что данных больше нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 21:56 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T полудух пропущено... точнее даже так: Код: plaintext 1. Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ. я не к тому, что "не прав", а к тому, что "оно ещё и вот так умеет" хорошо что в C++ уже открыто советуют (Herb Sutter) отказываться от арифметики указателей и юзать всякие array_view ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 22:02 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Dima T OoCc пропущено... Это равносильно Код: plaintext 1. тоесть this будет null а внутри будет обращение к свойствам, т.е. чтение по по адресу this+N, где N от 0 до ... С и С++ работают по принципу "программист знает что он делает". Если он так сделал значит он наверное проверил в функции this на null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 22:03 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Сложный код на С и С++ вообще не переводится ни на один язык мира. А вот наоборот пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2020, 01:23 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
так нигде же больше нет указателей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2020, 01:44 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
mayton И гдеж тот господин который рекламировал PVS Пивас студия и сюда добралась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2020, 04:13 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Одно время он был очень активен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2020, 08:25 |
|
||
|
Странный код
|
|||
|---|---|---|---|
|
#18+
Кстати самый первый варнинг который выдал cppcheck - это неиспользование результата функции HAL_SPI_Receive_IT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2020, 11:57 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1339832]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 17ms |
| total: | 298ms |

| 0 / 0 |
