|
Cpp check ругается, можно ли так писать? |
|
|
|
Feb 6 2018, 12:34
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Имею массив из float и указатель на него. Код pSigRe = SigRe; for (uint32_t i = FFT_N; i--; ) { *pSigRe++ = log2f(*pSigRe) * 15.0515; } При проверке cpp check выдает ошибку. Кратко: Expression '*pSigRe++=log2f(*pSigRe)*15.0515' depends on order of evaluation of side effects Сообщение: Expression '*pSigRe++=log2f(*pSigRe)*15.0515' depends on order of evaluation of side effects Точно, так нельзя писать?
|
|
|
|
|
 |
Ответов
|
Feb 7 2018, 05:41
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(ViKo @ Feb 7 2018, 08:10)  Вопрос, почему CppCheck ругается, а Keil молча делает, как было задумано. Кто из них тупит? Не знаю что за CppCheck, но он тут молодец, что предупредил. А Keil не молодец. Хотя может и молодец, что схавал, полагаясь на компетентность программиста (а иногда так и хочется наорать на компилятор "я знаю что я делаю, тварь!"  ). Хотя и не молодец, хотя бы warning бы кинул... Цитата(V_G @ Feb 7 2018, 08:22)  Я думаю, если ассемблер данного конкретного контроллера поддерживает постинкремент указателей, и компилятор использует это свойство, то результат будет всегда один. Если же перейти на проц, где нет этой фичи (или уже не хватает регистров для указателей), результаты компиляции могут быть неоднозначными. Как радиоинженер и непрофессиональный программист, я тоже предпочитаю не вспоминать приоритеты и не жалеть скобок. Ассемблер тут совершенно ни при чем. Это полностью зависит от компилятора. Реализовано ли в системе команд постинкремент или нет, совершенно не важно, компилятор может спокойно разбить постинкремент на несколько инструкций. Я не понимаю одного - если в стандарте четко написано о таких вещах, зачем намеренно создавать себе проблему "кодированием через пробы и ошибки"? Ведь даже элементарное включение оптимизации может привести совершенно к другому порядку инструкций, и гарантировать равнозначное поведение в данном случае невозможно.
|
|
|
|
Сообщений в этой теме
ViKo Cpp check ругается Feb 6 2018, 12:34 V_G Цитата(ViKo @ Feb 6 2018, 22:34) Точно, т... Feb 6 2018, 12:56 ViKo Цитата(V_G @ Feb 6 2018, 15:56) Мне непон... Feb 6 2018, 13:00  megajohn проверьте так
pSigRe = SigRe;
for (uint32_t i =... Feb 6 2018, 13:18   ViKo Цитата(megajohn @ Feb 6 2018, 16:18) пров... Feb 6 2018, 13:35 Kabdim Цитатаолучить адрес (попутно инкрементированной) п... Feb 6 2018, 13:30 _pv Цитата(ViKo @ Feb 6 2018, 19:34) Сообщени... Feb 6 2018, 13:34 jcxz Цитата(_pv @ Feb 6 2018, 15:34) на *pSigR... Feb 6 2018, 14:00  ViKo Цитата(jcxz @ Feb 6 2018, 17:00) Из первы... Feb 6 2018, 14:08   jcxz Цитата(ViKo @ Feb 6 2018, 16:06) По сущес... Feb 6 2018, 14:09    ViKo Цитата(jcxz @ Feb 6 2018, 17:09) И...?
Ка... Feb 6 2018, 14:12     jcxz Цитата(ViKo @ Feb 6 2018, 16:12) Вы прика... Feb 6 2018, 14:19 jcxz Цитата(ViKo @ Feb 6 2018, 14:34) Кратко: ... Feb 6 2018, 13:53 ViKo Цитата(jcxz @ Feb 6 2018, 16:53) Это вопр... Feb 6 2018, 13:55 ViKo Ладно. Значит, нужно найти точное толкование, когд... Feb 6 2018, 14:22 jcxz Цитата(ViKo @ Feb 6 2018, 16:22) Ладно. З... Feb 6 2018, 14:45 x893 Цитата(jcxz @ Feb 6 2018, 17:19) Нет. Не ... Feb 6 2018, 14:26 ViKo Цитата(x893 @ Feb 6 2018, 17:26) Пример н... Feb 6 2018, 14:30  Сергей Борщ QUOTE (ViKo @ Feb 6 2018, 16:30) Так, жду... Feb 6 2018, 14:36   ViKo Цитата(Сергей Борщ @ Feb 6 2018, 17:36) В... Feb 6 2018, 14:39    jcxz Цитата(ViKo @ Feb 6 2018, 16:39) Здесь то... Feb 6 2018, 14:43    haker_fox QUOTE (ViKo @ Feb 6 2018, 22:39) Здесь то... Feb 6 2018, 14:44  SSerge Цитата(ViKo @ Feb 6 2018, 21:30) Так, жду... Feb 6 2018, 14:44   ViKo Цитата(SSerge @ Feb 6 2018, 17:44) Изволь... Feb 6 2018, 14:57    Сергей Борщ QUOTE (ViKo @ Feb 6 2018, 16:57) Это уж д... Feb 6 2018, 15:48    jcxz Цитата(ViKo @ Feb 6 2018, 16:57) Это уж д... Feb 6 2018, 16:33 haker_fox QUOTE (ViKo @ Feb 6 2018, 20:34) Точно, т... Feb 6 2018, 14:41 haker_fox Первый пример я бы записал так:
CODE for (uin... Feb 6 2018, 14:46 Arlleex Довольно интересная тема в Си, связанная с базовым... Feb 6 2018, 15:54 Den64 Цитата(ViKo @ Feb 6 2018, 15:34) Имею мас... Feb 6 2018, 16:41 Arlleex Цитата(Den64 @ Feb 6 2018, 20:41) Должно ... Feb 6 2018, 17:00 x893 А если вдруг запустит на двух- и более процессорно... Feb 6 2018, 16:47 DASM Хорошо вас тут читать.. но.. мое мнение если можно... Feb 6 2018, 17:23 jcxz Цитата(DASM @ Feb 6 2018, 19:23) Я лично ... Feb 6 2018, 17:58 Arlleex Цитата(DASM @ Feb 6 2018, 20:23) Хорошо в... Feb 6 2018, 17:58 AnatolyT Имеем следующее
pSigRe = SigRe;
for (uint32_t i... Feb 6 2018, 18:41 ViKo Не считайте упрямством, хочу разобраться. Постинкр... Feb 6 2018, 20:00 Arlleex Цитата(ViKo @ Feb 6 2018, 23:00) Не счита... Feb 6 2018, 20:24 jcxz Цитата(ViKo @ Feb 6 2018, 22:00) Не счита... Feb 6 2018, 21:37 ViKo Компилятор использовал следующую команду для запис... Feb 6 2018, 20:49 Arlleex Цитата(ViKo @ Feb 6 2018, 23:49) Компилят... Feb 6 2018, 21:01 ViKo Мог бы... Но не сделал. А сделал так, как мне и бы... Feb 7 2018, 05:10 V_G Я думаю, если ассемблер данного конкретного контро... Feb 7 2018, 05:22 jcxz Цитата(V_G @ Feb 7 2018, 07:22) Я думаю, ... Feb 7 2018, 11:43 x893 А еще правильнее написать авторам cppcheck и задат... Feb 7 2018, 06:03 Сергей Борщ QUOTE (x893 @ Feb 7 2018, 08:03) А еще пр... Feb 7 2018, 07:46 mcheb Решил проверить в GCC
Код uint16_t i;
float SigRe... Feb 7 2018, 06:16 ViKo CODE**********************************************... Feb 7 2018, 09:53 haker_fox ViKo, учтите замечания анализатора. Зачем вам писа... Feb 7 2018, 14:22 Arlleex Привел код. Скомпилировал на C++ Builder 2010 и в ... Feb 7 2018, 10:19 ViKo Усё, таперича проникся. Просвещен. Спасибо всем не... Feb 7 2018, 10:50 ViKo Зависит от типа оптимизации. Пусть хоть весь цикл ... Feb 7 2018, 11:58 Kabdim Удивляет что половина вроде как "опытных... Feb 7 2018, 12:22 Arlleex Цитата(Kabdim @ Feb 7 2018, 16:22) Удивля... Feb 7 2018, 13:20 DASM Цитата(Kabdim @ Feb 7 2018, 15:22) Удивля... Feb 7 2018, 14:14  Kabdim Цитата(DASM @ Feb 7 2018, 17:14) Многие о... Feb 7 2018, 15:04   DASM Цитата(Kabdim @ Feb 7 2018, 18:04) Сравни... Feb 7 2018, 15:23 Kabdim Собственно к тем кто не пишет никаких претензий не... Feb 7 2018, 15:28 DASM Согласен Feb 7 2018, 15:32 sigmaN Только на элкетрониксе могут написать еще страницы... Feb 7 2018, 17:25 jcxz Цитата(sigmaN @ Feb 7 2018, 19:25) Как, к... Feb 7 2018, 17:55 DASM Цитата(sigmaN @ Feb 7 2018, 20:25) Только... Feb 7 2018, 19:04 ViKo Мне страниц не жалко. Пусть хоть 33 будет.
Не знат... Feb 7 2018, 18:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|