Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cpp check ругается
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
jcxz
Цитата(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++.
ViKo
Зависит от типа оптимизации. Пусть хоть весь цикл развернет в линейный код, лишь бы делал, что задумано.
Kabdim
Удивляет что половина вроде как "опытных" "своих" не знают причин почему так получается.
Arlleex
Цитата(Kabdim @ Feb 7 2018, 16:22) *
Удивляет что половина вроде как "опытных" "своих" не знают причин почему так получается.

Для этого и существует форум, ИМХО, для обмена опытом и т.д. Между прочим, такие вещи в книгах особо и не описываются, поэтому даже грамотные специалисты могут и не знать не помнить каких-то подводных камней...
Отдельное спасибо jcxz за пример оптимизирующего решения. Я же все никак до ассемблера кортексов не доберусь...
DASM
Цитата(Kabdim @ Feb 7 2018, 15:22) *
Удивляет что половина вроде как "опытных" "своих" не знают причин почему так получается.

Просто не пользуются и все такими конструкциями.
Код
template<class... Ts> struct overloaded : Ts... {};

template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

  

// usage

overloaded {[](auto arg) {}, [](double arg) {}};

Многие опытные скажут как это работает? Не пользуешься и не знаешь, ничего стыдного
haker_fox
ViKo, учтите замечания анализатора. Зачем вам писать компиляторозависимый код? Keil так сделает, IAR - по другому... Портируете код на PC, к примеру, и какой-нибудь майкрософтовский компилятор использует возможность следовать строгому стандарту и сделает ваш код неработоспособным))))

Kabdim
Цитата(DASM @ Feb 7 2018, 17:14) *
Многие опытные скажут как это работает? Не пользуешься и не знаешь, ничего стыдного

Сравнили выстрелы в ногу от постинкремента и приоритета операций, которые с времен чистого С тянутся с новыми фишками 17 версии.
DASM
Цитата(Kabdim @ Feb 7 2018, 18:04) *
Сравнили выстрелы в ногу от постинкремента и приоритета операций, которые с времен чистого С тянутся с новыми фишками 17 версии.

Ну не пишут опытные программеры конструкции как ТС предложил и все. Зачем?
Kabdim
Собственно к тем кто не пишет никаких претензий нет, огорчение вызывают те кто готов такое писать не обладая знаниями.
DASM
Согласен
sigmaN
Только на элкетрониксе могут написать еще страницы три после того как уже выяснили, что порядок выполнения операций слева и справа от присвоения не определен.

Как, кстати, и при передаче аргументов в функцию.
int a = 1;
func(a, a++);

Чему будут равны первый и второй параметры функции ))
jcxz
Цитата(sigmaN @ Feb 7 2018, 19:25) *
Как, кстати, и при передаче аргументов в функцию.
int a = 1;
func(a, a++);
Чему будут равны первый и второй параметры функции ))

Только не поминайте про это при ViKo, а то ещё 3 страницы будет! biggrin.gif
ViKo
Мне страниц не жалко. Пусть хоть 33 будет.
Не знать не зазорно. Никто не родился программистом, и не учил K&R вместо букваря.
А позорно бояться выглядеть неумным, типа, молчи, сойдешь за...
И будешь дураком, если наступишь на грабли дважды, трижды...
DASM
Цитата(sigmaN @ Feb 7 2018, 20:25) *
Только на элкетрониксе могут написать еще страницы три после того как уже выяснили

Не только http://forum.ixbt.com/topic.cgi?id=26:43257-3
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.