标识符的链接不一致
extern int var;
static int var; /* Undefined behaviour */
C11,§6.2.2,7 说:
如果在翻译单元内,同一标识符同时出现内部和外部链接,则行为未定义。
请注意,如果标识符的先前声明是可见的,那么它将具有先前声明的链接。 C11,§6.2.2,4 允许它:
对于在存储类规范外部声明的标识符,在该范围内可以看到该标识符的先前声明,31)如果先前声明指定内部或外部链接,则后面声明中标识符的链接与在先前声明中指定的联系。如果没有先前的声明可见,或者如果先前的声明没有指定链接,则标识符具有外部链接。
/* 1. This is NOT undefined */
static int var;
extern int var;
/* 2. This is NOT undefined */
static int var;
static int var;
/* 3. This is NOT undefined */
extern int var;
extern int var;