Компилятор знает, как увеличить указатель типа YourType *
, только если он знает размер YourType
, что имеет место в том и только в том случае, если полное определение YourType
известно компилятору на этом этапе. .
Например, если у нас есть:
struct YourType *a;
struct YourOtherType *b;
struct YourType {
int x;
char y;
};
Тогда вам разрешено это сделать:
a++;
но вам не разрешено делать это:
b++;
.., поскольку struct YourType
является завершенным типом, но struct YourOtherType
является неполным типом.
Ошибка, заданная gcc
для строки b++;
:
error: arithmetic on pointer to an incomplete type