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

 
 
> Cpp check ругается, можно ли так писать?
ViKo
сообщение Feb 6 2018, 12:34
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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
Точно, так нельзя писать? w00t.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
V_G
сообщение Feb 7 2018, 05:22
Сообщение #2


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Я думаю, если ассемблер данного конкретного контроллера поддерживает постинкремент указателей, и компилятор использует это свойство, то результат будет всегда один. Если же перейти на проц, где нет этой фичи (или уже не хватает регистров для указателей), результаты компиляции могут быть неоднозначными.
Как радиоинженер и непрофессиональный программист, я тоже предпочитаю не вспоминать приоритеты и не жалеть скобок.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 7 2018, 11:43
Сообщение #3


Гуру
******

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



Цитата(V_G @ Feb 7 2018, 07:22) *
Я думаю, если ассемблер данного конкретного контроллера поддерживает постинкремент указателей, и компилятор использует это свойство, то результат будет всегда один.

Нет, это не так. Это только означает что в данном конкретном случае оптимизатору выгоднее было использовать такой набор команд.
Если вдруг окажется, что эта команда находится в цикле со множеством постинкрементных адресаций в пределах одной итерации цикла:
Код
p = &array[0];
do {
i0 = *p++;
...
i1 = *p++;
...
i2 = *p++;
...
i3 = *p++;
} while ();

то оптимизирующий компилятор сделает:
Код
p = &array[0] - 4;
do {
LDR R1, [R0, #16]!
...
LDR R2, [R0, #4]
...
LDR R3, [R0, #8]
...
LDR R4, [R0, #12]
} while ();

потому что все эти команды внутри цикла в сумме по размеру будут == 4+2+2+2 байт - это меньше, чем:
Код
do {
LDR R1, [R0], #4
...
LDR R2, [R0], #4
...
LDR R3, [R0], #4
...
LDR R4, [R0], #4
} while ();

итого == 4+4+4+4 байт.
В таких случаях выгоднее (в системе команд Cortex-M) сделать один раз приращение указателя в теле цикла, чем в каждой точке *p++.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Arlleex   Цитата(ViKo @ Feb 7 2018, 08:10) Вопрос, ...   Feb 7 2018, 05:41
- - 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


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 21:24
Рейтинг@Mail.ru


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