[devel] memcpy глючит (или я не умею его готовить)
Leonid Krivoshein
klark.devel на gmail.com
Сб Фев 23 16:08:09 MSK 2019
23.02.2019 15:55, Alexey V. Vissarionov пишет:
> On 2019-02-23 15:28:44 +0300, Leonid Krivoshein wrote:
>
> >>> void-указателями такого не проделаешь, в отличие от gcc, который
> >>> тоже >>> ни один стандарт могёт.
> >> Я не понял этой фразы и сравнения указателей с gcc. При чем тут
> >> указатель на void? Размер объекта в этом случае не известен,
> >> разумеется арифметика не работает.
>
> Арихметика работает независимо от. Например, конструкцию вида
>
> void *x; int y = x[1];
>
> компилятор пошлет по азимуту, и правильно сделает. Но при этом
>
> void *x; int y = x+123;
>
> не вызовет у компилятора никаких эмоций
А по-моему здесь будет ворнинг. Но можно проверить.
> и превратится (на писюшатине)
> в самый обычный lea. Почему? Потому что это обычное сложение, а как
> потом будет использоваться результат - уже забота не компилятора, а
> программиста.
>
> Если что, я такие конструкции регулярно использую, когда пишу для
> контроллеров.
В любом случае я бы такие рисковые конструкции не использовал.
> > Вы прибавляете к адресу целое число, которое является чем?
> > Разницей в адресах или индексах?
>
> sizeof(void) - это сколько? :-)
Вчера было 1 (для gcc). Но тогда это ответ неверный. Потому что,
согласно стандарту, разница должна быть в индексах, а не в байтах. И
согласно ему же результат такого сложения с void* не определён. А в gcc
это будет эквивалентно char* + int.
--
Best regards,
Leonid Krivoshein.
Подробная информация о списке рассылки Devel