Некоторые компиляторы C могут иногда выводить приведенный указатель как значение lvalue, но значения по умолчанию для gcc не компилируют его.Вместо того, чтобы порт ( человек - склонен к ошибкам) устаревший код базы:
p=(int *)p+1 ; /* increment by sizeof(int) */
может gcc сделать так, чтобы этот код был указан ниже (даже если он технически не корректен)?
void f() {
void *p ; /* type to be cast later for size */
((int *)p)++ ; /* gcc -c f.c => lvalue required error */ }
Редактировать: даже если он технически неверен, я предполагаю, что единственное намерение программиста для такого кода предназначено для p
чтобы остаться lvalue и "увеличить" его, генерируя тот же код, что и моя длинная форма, верно?( perreal помечен как «lvalue cast»)
Edit2: Мы все согласны с тем, что рефакторинг для std C лучше, но если что-то вроде Mateo s -fpermissive
сработало, он может не уловить будущие ошибки программирования, но надеяться, что начальное gcc портирование будет менее ошибочным ... Какие-нибудь другие подобные предложения?