|
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 6 2018, 13:34
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(ViKo @ Feb 6 2018, 19:34)  Сообщение: Expression '*pSigRe++=log2f(*pSigRe)*15.0515' depends on order of evaluation of side effects Точно, так нельзя писать?  писать-то можно, только вот результат может оказаться не совсем таким как задумано. Цитата Записываю результат по указателю, и инкрементирую его (указатель) для следующей операции. а может всё-таки сначала инкрементируете, потом считаете логарифм уже от следующего элемента, но результат записываете на место предыдущего? на *pSigRe = log2f(*pSigRe++) * 15.0515; ругаться имхо не должен.
|
|
|
|
|
Feb 6 2018, 14:00
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(_pv @ Feb 6 2018, 15:34)  на *pSigRe = log2f(*pSigRe++) * 15.0515; ругаться имхо не должен. Нет, необязательно. Вообще нужно просто взять за правило, что если в пределах одного выражения разыменование указателя встречается более одного раза, то никакие пре- или пост- инкрементные или декрементные адресации использовать нельзя. Цитата(ViKo @ Feb 6 2018, 15:55)  Вы первые строки в сообщениях принципиально пропускаете?  Да и какая разница, что за тип? Из первых строк сообщения можно только сделать вывод что где-то у Вас есть некий массив float и есть некий указатель на него. Больше оттуда нельзя получить никакой информации. Значит всё-таки викторина.... Видимо Вы и программы так пишете - предоставляете компилятору право гадать, что вы хотели написать. Ну естественно и результат закономерный Далее включаю экстрасенсорные способности и прикидываю - о каком указателе речь? Может это: float volatile *pSigRe ? а может: float *pSigRe ? а может ещё что...?
|
|
|
|
|
Feb 6 2018, 14:08
|

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

|
Цитата(jcxz @ Feb 6 2018, 17:00)  Из первых строк сообщения можно только сделать вывод что где-то у Вас есть некий массив float и есть некий указатель на него. Больше оттуда нельзя получить никакой информации. Значит всё-таки викторина.... Ну, раз нельзя, тогда пусть викторина. По существу. У классиков K&R имеется пример, которым, собственно и пользуюсь (руководствуюсь) издавна. Код /* strcpy: копирует t в s; версия 3 (с указателями) */ void strcpy(char *s, char *t) { while (*s++ = *t++) ; } Считаю, CppCheck пугает химерами зря. jcxz, вам - персонально: Код static float SigRe[FFT_N] __attribute((section("extram"))); float *pSigRe;
|
|
|
|
|
Feb 6 2018, 14:09
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Feb 6 2018, 16:06)  По существу. У классиков K&R имеется пример, которым, собственно и пользуюсь издавна. ... И...? Каким боком он сюда относится? Цитата(ViKo @ Feb 6 2018, 16:08)  jcxz, вам - персонально: Спасибо
|
|
|
|
Сообщений в этой теме
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 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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|