реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> (char *)p = 0; выдает ошибку "invalid lvalue in assignment", это нормально для GCC? а... для ANSI C?
Alex2172
сообщение Mar 30 2006, 15:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



где p - указатель на некоторую структуру.

Столкнулся с этим при портировании кода с Keil на GCC
(c GCC не работал - прошу сильно не бить ногами за глупые вопросы)
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 30 2006, 15:37
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



По стандарту, правильный вариант p = (void*)0;


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Mar 30 2006, 19:52
Сообщение #3


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Чего-то я в первый раз встречаю, чтобы приводили левую часть. Обычно правую приводят к левой... А что за DSP-шник то, который Keil поддерживает?


--------------------
شامل
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Mar 31 2006, 07:04
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



Цитата(Edmundo @ Mar 30 2006, 23:52) *
Чего-то я в первый раз встречаю, чтобы приводили левую часть. Обычно правую приводят к левой... А что за DSP-шник то, который Keil поддерживает?


Если честно я тоже первый раз встречаю, чтобы приводили левую часть, сам никогда так не делаю. Но вот встретил это в Кейловском примере для LPC214x.
Блин случайно написал не в ту ветку (для DSP).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 31 2006, 07:11
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Mar 31 2006, 07:28
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



Цитата(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;

Сообщение отредактировал Alex2172 - Mar 31 2006, 07:28
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 31 2006, 08:57
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(Alex2172 @ Mar 31 2006, 11:28) *
Вот исходник от Keil:
(BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;

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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Mar 31 2006, 09:10
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



Цитата(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;
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Mar 31 2006, 12:41
Сообщение #9


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Похоже, Keil весьма вольно относится к наследию Кернигана и Ричи smile.gif
Хотя для оператора += ясно, зачем так сделано, все-таки мне кажется, что ANSI против этого (я, конечно, ANSI не читал, но мне так кажется).


--------------------
شامل
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 31 2006, 15:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Alex2172 @ Mar 31 2006, 09:28) *
(char *)p = 0;
или что-то еще... это лишь абстракция.

Это плохо, что для Вас это пока? только 'абстракция'.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016