在此代码中尝试更改名称i
的链接。它在C / C ++中是否合法?
static int i = 2;
int i;
int main()
{
return 0;
}
答案 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'先前在此定义