這是有效的語法,在C99標準中甚至有一個基本相同的例子。 (請參閱第6.9.2-4節。)
的確,這些示例不是規範性的,但我相信它的目的是成爲合法的語法。編譯器通常會輸出一個警告,因爲它並沒有真正完成任何事情。
4實施例1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage
extern int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to previous, whose linkage is external
extern int i2; // refers to previous, whose linkage is internal
extern int i3; // refers to previous, whose linkage is external
extern int i4; // refers to previous, whose linkage is external
extern int i5; // refers to previous, whose linkage is internal
不,因爲這實際上是一個定義而不是一個聲明。 – Clifford 2010-02-27 23:50:04
LLVM會引發一個警告:「extern變量有一個初始化程序」 – Binarian 2013-10-05 14:23:17