я играл с недействительными указателями и создал этот пример:GCC 2.9 и «именующий требуется в качестве левого операнда назначения»
#include <stdio.h>
struct intint {
int a;
int b;
};
struct intshortshort {
int a;
short b;
short c;
};
void fill_me(struct intint **pii, void *piss)
{
(void*)*pii = piss; // Question about this line?
}
int main()
{
struct intint *pii = NULL;
struct intshortshort iss;
iss.a = iss.b = iss.c = 13;
fill_me(&pii, &iss);
printf("%d..%d\n", pii->a, pii->b);
return 0;
}
Вопрос:
Когда я использую GCC версию 2.95. 4 все компилируется и работает, как ожидалось, но GCC версии 4.7.3 дает мне следующую ошибку:
void_pointer.c:16:17: error: lvalue required as left operand of assignment
есть ли причина, почему добавление (недействительными *) в Lvalue не допускается больше?
Редактировать: Спасибо за ответы, я думаю, что понял проблему, но вопрос «почему это было в порядке?» по-прежнему интересен.
результат броска не именующее, если это не в качестве ссылки. Например, http://coliru.stacked-crooked.com/a/61ba4d86f65eaa3e – chris
@chris Нет, результат приведения не является периодом lvalue. Возможно, вы думаете о другом языке программирования. –
@PascalCuoq, Простите меня, я подумал, что это было помечено C++, когда я сделал этот комментарий. Я почти уверен, что я просто сумасшедший. – chris