реклама на сайте
подробности

 
 
> Странное предупреждение
Jenya7
сообщение Jun 5 2018, 05:52
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть такая строчка в коде
Код
for (i=0; i < size_to_take; i++)
{
      DataBuffer[i] = (data_out[j++]<<8) | data_out[j++];
}
Выскакивает предупреждение
Цитата
Warning[Pa079]: undefined behavior: variable "j" (declared at line 176) (or a value reached by some form of indirection through it) is modified more than once without an intervening
В GCC компайлере такого предупреждения нет.Что надо переделать чтоб предупреждение исчезло?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Jun 20 2018, 07:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Jenya7 @ Jun 5 2018, 10:52) *
Есть такая строчка в коде
Код
for (i=0; i < size_to_take; i++)
{
      DataBuffer[i] = (data_out[j++]<<8) | data_out[j++];
}

если нет перевёртывания с эндианами и DataBuffer - это 16-ти разрядное, то
Код
memcpy((void*)DataBuffer, (void*)&data_out[j], 2*size_to_take);
j += 2*size_to_take; //если j дальше не нужно, удалить эту строку
без ворнингов, безопаснее, и БЫСТРЕЕ. (явное преобразование к воид не обязательно).
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 20 2018, 09:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(juvf @ Jun 20 2018, 10:19) *
безопаснее, и БЫСТРЕЕ..

Не верю! cool.gif
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 20 2018, 10:10
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(jcxz @ Jun 20 2018, 14:40) *
Не верю! cool.gif

Bера в церкви. Вы как гуру должны не верить, а знать, что for-loop будет работать не быстрее, чем любые практические реализации memcpy().
а про безопастность - так ТС стрельнул себе в ногу своим forech, причем даже где-то gcc не ругнулся. C memcpy не нужны манимуляции с j.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 20 2018, 18:49
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(juvf @ Jun 20 2018, 13:10) *
...ТС стрельнул себе в ногу своим forech, причем даже где-то gcc не ругнулся...

GCC не ругнётся нигде и никогда: у ТСа IAR wink.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 21 2018, 04:24
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Obam @ Jun 20 2018, 23:49) *
GCC не ругнётся нигде и никогда: у ТСа IAR wink.gif
2Obam, читаем ещё раз первый пост ТС до конца
Цитата
В GCC компайлере такого предупреждения нет.


Цитата
Причём вообще в данном примере memcpy()? ...если ТС судя по всему пытается поменять байты местами при перемещении из источника в приёмник?
С чего Вы вообще взяли, что DataBuffer имеет размерность 16 бит, а data_out - 8 бит?
Причём там вообще memcpy()??? Научитесь читать исходники!

adnega - ППКС,
2jcxz - из кода видно, что с вероятностью близкой к 100, данные из какого-то байтового тх/рх буфера перекидываются в нужный массив DataBuffer. Научитесь читать исходники!.
Но не факт что это так, поэтому я сразу написал
Цитата
если нет перевёртывания с эндианами и DataBuffer - это 16-ти разрядное, то

2jcxz - Научитесь читать посты участников.

Цитата
мало ли чего человек хочет? Может ему требуется читать из источника пары байт и записывать их по адресу назначения с расширением до 32-бит. Не задумывались?
Может быть! Согласен. Может data_out - это класс, а операторы << и | перегруженны. Может даже оператор "++" перегружен в "--". Может где то false переопределён в true. Но из кода видно, что с большей вероятностью просто перекачка из 8 бит массива в 16 битный, поэтому я и сделал оговорку.

Что касается memcpy() и остального....

Цитата
И я знаю как внутри работает memcpy()
Как вы можете знать, как работает memcpy() у ТС, если memcpy реализуется разработчиками каждого компилятора под каждую архитектуру? Вы знаете как каждый memcpy() реализован? У каждого своя реализация. Как правило, memcpy() реализован так, что из всех возможных реализаций код memcpy будет самый оптимальный, вплоть до ухода в асм. Если пользователь компилятора/библиотеки и решит написать свой копипаст, то он будет менее эффективный, в лучшем случае будет такойже, поэтому при копировании памяти не нужно замарачиваться и изобретать скоростной велосипед, а просто использовать memcpy(). Наверно бывают случаю, что memcpy сырой, написан индусами и можно свой написать оптимальней, но это на столько редко.... и нужно хорошо знать архитектуру. Потратите много времени, выиграете 1-2 такта на копировании 1 байта.

более того, если ЕСЛИ всё же нет перевертывания и это 8 и 16 бит, то даже плохой memcpy будет быстрее кода ТС. Посмотрите сколько лишних операций в for у ТС! какие-то приведения типов, операторы, << и |, дополнительный j, операции j++!!! УЖАС!!!(кстати.... j++ достаточно медленный, по сравнению с ++j). Более того, если ЕСЛИ data_out - это signed char или int8_t, то в коде ТС ошибка, которая обнаружиться только при выполнении, и хорошо если на столе ТС, а может и через год-два у пользователя.

jcxz я сюда не батлится с вами захожу, я тут черпаю чужой опыт, делюсь своим и чужим опытом. Поделитесь вы.....
Цитата
Поэтому он будет быстрее только в определённых случаях.

В каких случаях?
Цитата
Вы в своём совете с memcpy() допустили пару неточностей.
какие неточности? Опять же, mне на батл пофиг, просто я не хочу ошибаться и других вводить в заблуждение в отличие от некоторых
Или вы пустослов? Тогда можно нужно отфильтровать ваши посты, ибо это всё равно что "на заборе написано".

ps
вы сами себе противоречите, причем сразу в одном посте.....
Цитата
ТС судя по всему пытается поменять байты местами при перемещении из источника в приёмник...
С чего Вы вообще взяли, что DataBuffer имеет размерность 16 бит, а data_out - 8 бит?
так всё таки "ТС ... пытается поменять байты" или "С чего Вы вообще взяли, что ... data_out - 8 бит?"

С чего вы решили, что я утверждаю, что DataBuffer 16 бит, а data_out - 8 бит? Я писал ЕСЛИ, вы знаете значение слова "если"?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 21 2018, 05:32
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(juvf @ Jun 21 2018, 07:24) *
С чего вы решили, что я утверждаю, что DataBuffer 16 бит, а data_out - 8 бит? Я писал ЕСЛИ, вы знаете значение слова "если"?

Среди профессионалов принято так: если есть наиболее вероятное и простое объяснение, то нужно пользоваться именно им.
В противном случае один мой знакомый говорил: "а если инопланетяне прилетели и сделали {подставить нужное}".
Если ТС-инопланетянин, пишет, вроде, по нашему, но по ихнему это совсем другой смысл, то jcxz должен посыпать голову пеплом раз не
предположил, что такое возможно. Дальше смысл беседы в этом направлении теряется.
Если по исходнику понятно, что источник шире 8 байт приведет к перемешиванию бит, а в приемнике в итоге получается только 16 значащих бит,
то с уверенностью можно принять за факт их размеры 8 и 16 бит соответственно, и при необходимости заявлять "сам дурак",
если ТС начнет добавлять противоречащие новые обстоятельства.

В соседней ветке про таймеры ТС на третей станице пошел по второму кругу, хотя у меня была полная уверенность, что точка в вопросе поставлена.
В этой связи, jcxz поддерживаю, т.к. без телепатии, а на одной только логике, не понять, что нужно ТС.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 21 2018, 06:22
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (adnega @ Jun 21 2018, 08:32) *
"а если инопланетяне прилетели и сделали {подставить нужное}".
К сожалению, аборигены запомнили только, что нужно хлопать при приземлении.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jun 21 2018, 07:27
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Сергей Борщ @ Jun 21 2018, 09:22) *
К сожалению, аборигены запомнили только, что нужно хлопать при приземлении.

Продвинутые еще впп научились строить, чтобы их посещали.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Странное предупреждение   Jun 5 2018, 05:52
- - scifi   j++ два раза в одном выражении - это бяка. Результ...   Jun 5 2018, 05:54
|- - Jenya7   Цитата(scifi @ Jun 5 2018, 11:54) j++ два...   Jun 5 2018, 05:58
|- - MrYuran   Цитата(scifi @ Jun 5 2018, 08:54) j++ два...   Jun 5 2018, 06:18
- - scifi   Цитата(Jenya7 @ Jun 5 2018, 08:58) по мое...   Jun 5 2018, 06:37
|- - andrew_b   Цитата(scifi @ Jun 5 2018, 09:37) То есть...   Jun 5 2018, 06:49
||- - scifi   Цитата(andrew_b @ Jun 5 2018, 09:49) Риск...   Jun 5 2018, 07:09
||- - andrew_b   Цитата(scifi @ Jun 5 2018, 10:09) Неверно...   Jun 5 2018, 13:24
||- - Сергей Борщ   QUOTE (andrew_b @ Jun 5 2018, 16:24) Оно?...   Jun 5 2018, 15:22
|- - MrYuran   Цитата(scifi @ Jun 5 2018, 09:37) То есть...   Jun 5 2018, 07:07
|- - Jenya7   Цитата(scifi @ Jun 5 2018, 12:37) Что меш...   Jun 5 2018, 08:17
- - ViKo   А вот же похожая тема. Только в ней инкремент с др...   Jun 5 2018, 07:34
- - k155la3   Код DataBuffer[i] = (data_out[j++...   Jun 5 2018, 12:55
|- - scifi   Цитата(juvf @ Jun 20 2018, 10:19) без вор...   Jun 20 2018, 08:59
|- - jcxz   Цитата(juvf @ Jun 20 2018, 13:10) Bера в ...   Jun 20 2018, 10:24
||- - juvf   Цитата(jcxz @ Jun 20 2018, 15:24) но даже...   Jun 20 2018, 10:37
||- - jcxz   Цитата(juvf @ Jun 20 2018, 13:37) какую? ...   Jun 20 2018, 18:30
||- - adnega   Цитата(jcxz @ Jun 20 2018, 21:30) С чего ...   Jun 20 2018, 18:42
||- - jcxz   Цитата(adnega @ Jun 20 2018, 21:42) Это о...   Jun 20 2018, 19:31
||- - adnega   Цитата(jcxz @ Jun 20 2018, 22:31) И что? ...   Jun 20 2018, 20:01
|- - adnega   Цитата(juvf @ Jun 20 2018, 13:10) C memcp...   Jun 20 2018, 10:31
|- - jcxz   Цитата(juvf @ Jun 21 2018, 07:24) Как вы ...   Jun 21 2018, 07:05
|- - juvf   Цитата(jcxz @ Jun 21 2018, 12:05) Цитата(...   Jun 22 2018, 05:11
|- - scifi   Цитата(juvf @ Jun 22 2018, 08:11) Добрый ...   Jun 22 2018, 06:55
|- - jcxz   Цитата(juvf @ Jun 22 2018, 08:11) ps пров...   Jun 22 2018, 07:37
|- - juvf   ваш ответ - тоже априори. много слюней, воды, теле...   Jun 22 2018, 09:13
|- - jcxz   Цитата(juvf @ Jun 22 2018, 12:13) Нормаль...   Jun 22 2018, 09:31
|- - juvf   Цитата(jcxz @ Jun 22 2018, 14:31) Ну, дае...   Jun 22 2018, 18:10
- - scifi   Цитата(juvf @ Jun 20 2018, 10:19) и БЫСТР...   Jun 20 2018, 12:52
|- - VladislavS   Цитата(scifi @ Jun 20 2018, 15:52) Интере...   Jun 20 2018, 17:59
- - juvf   ну на конец то предметный разговор, а не "сле...   Jun 21 2018, 07:50
|- - scifi   Цитата(juvf @ Jun 21 2018, 10:50) Но, во ...   Jun 21 2018, 08:03
||- - juvf   Цитата(scifi @ Jun 21 2018, 13:03) За так...   Jun 21 2018, 08:17
|- - jcxz   Цитата(juvf @ Jun 21 2018, 10:50) Морите...   Jun 21 2018, 08:41
|- - scifi   Цитата(juvf @ Jun 21 2018, 10:50) Или по ...   Jun 21 2018, 08:42
|- - jcxz   Цитата(juvf @ Jun 21 2018, 10:50) Но, во ...   Jun 21 2018, 08:44
|- - juvf   ЦитатаПродолжаем думать дальше. Подсказываю ещё ра...   Jun 21 2018, 09:01
||- - scifi   Цитата(juvf @ Jun 21 2018, 12:01) Такой к...   Jun 21 2018, 09:07
|||- - juvf   Цитата(scifi @ Jun 21 2018, 14:07) Конечн...   Jun 21 2018, 09:24
||- - jcxz   Цитата(juvf @ Jun 21 2018, 12:01) Что за ...   Jun 21 2018, 10:18
||- - juvf   Цитата(jcxz @ Jun 21 2018, 14:53) Где это...   Jun 21 2018, 10:24
|||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:24) ээээ......   Jun 21 2018, 11:06
|||- - scifi   Цитата(jcxz @ Jun 21 2018, 14:06) И по ас...   Jun 21 2018, 11:09
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:06) При пер...   Jun 21 2018, 11:19
||- - adnega   Цитата(jcxz @ Jun 21 2018, 13:09) В приве...   Jun 21 2018, 10:25
|||- - jcxz   Цитата(adnega @ Jun 21 2018, 13:25) компи...   Jun 21 2018, 11:12
|||- - scifi   Цитата(jcxz @ Jun 21 2018, 14:10) Для так...   Jun 21 2018, 11:13
||||- - jcxz   Цитата(scifi @ Jun 21 2018, 14:13) Пожалу...   Jun 21 2018, 11:22
|||- - adnega   Цитата(jcxz @ Jun 21 2018, 14:12) Из Ваше...   Jun 21 2018, 12:01
||- - juvf   Цитата(jcxz @ Jun 21 2018, 15:18) При отл...   Jun 21 2018, 10:50
||- - scifi   Цитата(juvf @ Jun 21 2018, 13:50) inline ...   Jun 21 2018, 11:04
||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:50) У меня ...   Jun 21 2018, 11:19
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:19) Ведь ес...   Jun 21 2018, 11:46
|||- - jcxz   Цитата(juvf @ Jun 21 2018, 14:46) в waitS...   Jun 21 2018, 12:11
|||- - adnega   Цитата(jcxz @ Jun 21 2018, 15:11) PS: Есл...   Jun 21 2018, 12:57
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 17:11) Вот так...   Jun 21 2018, 13:09
|||- - scifi   Цитата(juvf @ Jun 21 2018, 16:09) Дело в ...   Jun 21 2018, 13:19
||||- - juvf   ЦитатаПравильно тут уже написали про Ваш стиль: Вм...   Jun 21 2018, 14:44
|||- - adnega   Цитата(juvf @ Jun 21 2018, 16:09) Т.е. по...   Jun 21 2018, 13:34
|||- - scifi   Цитата(adnega @ Jun 21 2018, 16:34) Телеп...   Jun 21 2018, 13:40
|||- - adnega   Цитата(scifi @ Jun 21 2018, 16:40) А не л...   Jun 21 2018, 13:56
||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:50) inline ...   Jun 21 2018, 11:48
||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:48) описани...   Jun 21 2018, 12:29
||- - scifi   Цитата(juvf @ Jun 21 2018, 15:29) CS - не...   Jun 21 2018, 12:39
||- - jcxz   Цитата(juvf @ Jun 21 2018, 15:29) Я же го...   Jun 21 2018, 14:21
||- - adnega   Цитата(jcxz @ Jun 21 2018, 17:21) Нет, не...   Jun 21 2018, 14:47
|- - adnega   Цитата(jcxz @ Jun 21 2018, 11:44) Ибо в 9...   Jun 21 2018, 09:06
- - Kabdim   Любопытства ради и самообразования для, не могли б...   Jun 21 2018, 11:02
|- - juvf   Цитата(Kabdim @ Jun 21 2018, 16:02) Любоп...   Jun 21 2018, 11:06
- - VladislavS   Вместо стольких слов достаточно посмотреть листинг...   Jun 21 2018, 15:52
- - jcxz   Цитата(VladislavS @ Jun 21 2018, 18:52) В...   Jun 21 2018, 16:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.0158 секунд с 7
ELECTRONIX ©2004-2016