Ошибка в том, что арифметика c не разрешена ни для указателей типа void *
, ни для указателей на любой другой неполный тип. Это согласуется с тем фактом, что арифметика указателя c определяется в терминах размера указанного типа, который неизвестен для неполных типов.
Некоторые компиляторы реализуют расширение, которое будет применяться здесь, обрабатывая арифметический указатель c на void *
, как если бы указываемый тип имел размер 1. Часто это именно то, что задумал автор кода, как, по-видимому, имеет место в вашем коде. В этом случае вы можете подумать об исправлении этого недостатка в коде, изменив затронутую строку на
entry_table = (struct sfo_table_entry*)((char *)data + sizeof(*hdr));