Я видел следующий фрагмент кода в унаследованном проекте.
/* token.c */
struct token id_tokens[MAX_TOKENS];
/* analyse.c (v1) */
extern struct token *id_tokens; /* Raised my eyebrow, id_token declares a pointer */
Я настаивал на изменении analyse.c
, чтобы содержать объявление, как показано ниже:
/* analyse.c (v2) */
extern struct token id_tokens[]; /* I am happy with this. id_tokens declares array of unspecified size. */
Я хочу v2
, потому что pointer to T
не то же самое, что array of T
. Мой друг-счетчик аргументировал, что поведение обоих одинаково, поэтому не имеет значения, использую ли я v1 и v2.
Вопрос 1: Ли массив неполного типа заканчивается указателем?
Вопрос 2: Является ли мой друг правильным, что обе версии по своей природе гарантированно эквивалентны?