Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: (char *)p = 0; выдает ошибку "invalid lvalue in assignment"
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Alex2172
где p - указатель на некоторую структуру.

Столкнулся с этим при портировании кода с Keil на GCC
(c GCC не работал - прошу сильно не бить ногами за глупые вопросы)
vet
По стандарту, правильный вариант p = (void*)0;
Edmundo
Чего-то я в первый раз встречаю, чтобы приводили левую часть. Обычно правую приводят к левой... А что за DSP-шник то, который Keil поддерживает?
Alex2172
Цитата(Edmundo @ Mar 30 2006, 23:52) *
Чего-то я в первый раз встречаю, чтобы приводили левую часть. Обычно правую приводят к левой... А что за DSP-шник то, который Keil поддерживает?


Если честно я тоже первый раз встречаю, чтобы приводили левую часть, сам никогда так не делаю. Но вот встретил это в Кейловском примере для LPC214x.
Блин случайно написал не в ту ветку (для DSP).
zltigo
Цитата(vet @ Mar 30 2006, 17:37) *
Если честно я тоже первый раз встречаю, чтобы приводили левую часть, сам никогда так не делаю.

p = NULL;
Для того, что-бы "так не делать" и заодно не думать C/C++
Alex2172
Цитата(zltigo @ Mar 31 2006, 11:11) *
Цитата(vet @ Mar 30 2006, 17:37) *

Если честно я тоже первый раз встречаю, чтобы приводили левую часть, сам никогда так не делаю.

p = NULL;
Для того, что-бы "так не делать" и заодно не думать C/C++


(char *)p = 0;
или что-то еще... это лишь абстракция.
Вот исходник от Keil:
(BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
vet
Цитата(Alex2172 @ Mar 31 2006, 11:28) *
Вот исходник от Keil:
(BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;

Здесь приведение к BYTE* необходимо, чтобы задать величину инкремента.
Alex2172
Цитата(vet @ Mar 31 2006, 12:57) *
Цитата(Alex2172 @ Mar 31 2006, 11:28) *

Вот исходник от Keil:
(BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;

Здесь приведение к BYTE* необходимо, чтобы задать величину инкремента.

Естественно...
Но попробуйте это объяснить компилятору GCC.
При портировании в GCC пришлось везде код подобного типа менять на...
BYTE *p = (BYTE *) pD;
p += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
pD = (USB_CONFIGURATION_DESCRIPTOR *)p;
Edmundo
Похоже, Keil весьма вольно относится к наследию Кернигана и Ричи smile.gif
Хотя для оператора += ясно, зачем так сделано, все-таки мне кажется, что ANSI против этого (я, конечно, ANSI не читал, но мне так кажется).
zltigo
Цитата(Alex2172 @ Mar 31 2006, 09:28) *
(char *)p = 0;
или что-то еще... это лишь абстракция.

Это плохо, что для Вас это пока? только 'абстракция'.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.