I saw following piece of code in a legacy project.
/* token.c */
struct token id_tokens[MAX_TOKENS];
/* analyse.c (v1) */
extern struct token *id_tokens; /* Raised my eyebrow, id_token declares a pointer */
I insisted on changing analyse.c
to contain the declaration as below:
/* analyse.c (v2) */
extern struct token id_tokens[]; /* I am happy with this. id_tokens declares array of unspecified size. */
I want v2
because pointer to T
is not same as array of T
. My friend's counter argumented that behaviour of both are same, so it doesn't matter whether I use v1 and v2.
Question 1: Does array of incomplete type deplete to a pointer?
Question 2: Is my friend right that both versions are behaviorally guaranteed to be equivalent?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…