更改名称的链接

时间:2010-12-01 15:16:21

标签: c++ c

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

static int i = 2;
int i;

int main()
{
   return 0;
}

2 个答案:

答案 0 :(得分:10)

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

$ 3.2.1(C ++ 03)

  

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

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

  

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

答案 1 :(得分:1)

没有。在C中我得到这个错误:

  

test.c:2:错误:'i'的非静态声明遵循静态声明
  test.c:1:注意:'i'的先前定义在这里

在C ++中,这些:

  

test.cpp:2:错误:重新定义'int i'
  test.cpp:1:错误:'int i'先前在此定义