iliya
написал 17 декабря 2004 года в 14:05 (1384 просмотра)
Ведет себя
как мужчина; открыл 13 тем в форуме, оставил 196 комментариев на сайте.
Проблема такая , что в C работает код:
void *data;
…
data=data+10;
…
,а в C++ нет.
В чем проблема более менее понятно, но как написать тогда код без извращений.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
(int*)data = (int*)data + 10;
например. А без извращений не получится, сама идея порочная. Ну зачем тебе прибавлять 10 к указателю на void? :-)
Good Luck,
UT
Ну енто воще плохо, инты по смещению 4 (лучше char*), но это тоже мне не нравится.
У меня там просто блок памяти весит мне по нему лазать нужно.
идея — с одной стороны — порочная, с другой стороны — теряется переносимость..
хотя. может этого и добиваемся? ;)
использовать лучше даже не char*, а int8*. потому как char далеко не обязательно развен байту.
конечно, можно было бы использовать что-то типа (long)data+=10;, но.. это тоже не есть хорошо и переносимо. ;)
Ок, всё ясно.
Интересная мысь, и где он не равен байту?
В некоторых прогах byte определён как unsigned char, думаю, вряд ли бы такое делали если бы не было переносимости…
в некоторых «прогах» полагаются на то, что sizeof(int)==2.
а при написании некоторых приходится задумываться, что sizeof(long)!=4.
так что теперь? :D
Да толку что вы спорите….
Как сделать смещение на один байт?
Если (int*)data=(int*)data+1; то это смешение на 4 а то и больше.
А как на один если sizeof(char)!=1 ????
Получается только (void*)data+=1; а на C++ это не работает поскольку sizeof(void)=??? для него.
использовать специальные типы. int8, s8, u8.
мало ли, что они определяются через char. возьмут и в некотором будушем оторвут вообще пооддержку 8битных типов архитектурно. и комплиятор сам будет извращаться для работы с ними.
(int8*)data+=10;
Я и не собирался спорить, я просто это впервые слышу и очень удивлён, ещё бы прочитать это где-нибудь в более надёжных источниках…
:)))) похвальное стремление ;)
но, что замечательно, утверждения, что char занимает именно 8 бит, а не умолчального предположения, я не встречал.
очевидные, конечно же вещи, но полагаться на 100% на них не стОит ;)
так что — проверяйте.
А я вот думаю как в C проходит это
Если sizeof(void) неопределён…
определён, и, кроме того, равен 1.
далее,
Да действительно… Вот что говорит по этому поводу стандарт: «A pointer to void shall have the same representation and alignment requirements as a pointer to a character type».
2Fatal: ты про юникод слышал?
Тип для юникода
w_char
или
wchar
точно не помню, но никак не char
gchar :)))