更改名称的链接

sur*_*mar 7 c c++

i在此代码中尝试更改名称的链接.它在C/C++中是否合法?

static int i = 2;
int i;

int main()
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*rav 10

在C++中,您的代码格式不正确(您有多个变量定义i),即需要一个符合标准的编译器才能发出错误消息

$ 3.2.1(C++ 03)

任何翻译单元都不得包含任何变量,函数,类类型,枚举类型或模板的多个定义.

在C99中,您的代码调用未定义的行为,因为6.2.2/7说

如果在翻译单元内,同一标识符同时出现内部和外部链接,则行为未定义.

  • 在C++中,出于错误的原因,你得到了正确的答案.问题是问题中"i"的声明都是定义,它们的联系是无关紧要的(尽管它们的价值是他们同意的 - 都是内部的,7.1.1/6).`static int i = 2; extern int i;`会很好(3.5/6),和`extern int i; static int i = 2;`由于你给出的原因是非罚款,联系不同意. (2认同)