[devel] gcc pointer arithmetics
Dmitry V. Levin
ldv на altlinux.org
Вс Фев 24 19:22:44 MSK 2019
On Sun, Feb 24, 2019 at 02:06:56PM +0300, Mikhail Efremov wrote:
> On Sat, 23 Feb 2019 15:55:21 +0300 Alexey V. Vissarionov wrote:
> > 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. Почему? Потому что это обычное сложение, а как
> > потом будет использоваться результат - уже забота не компилятора, а
> > программиста.
> >
> > Если что, я такие конструкции регулярно использую, когда пишу для
> > контроллеров.
>
> Ну, я видимо не использовал, поэтому не помню, спасибо.
> Вообще логично, до того как в языке появился void * обычно использовали
> char * для этих целей.
Это gcc extension, причём довольно старый.
https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/Pointer-Arith.html
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC78
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : signature.asc
Тип : application/pgp-signature
Размер : 801 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20190224/aabd2ebe/attachment.bin>
Подробная информация о списке рассылки Devel