我看了,但仍有疑问。主要有两点,第一:《C primer plus》上说:全局变量如果用static 限定,那就是具有内部链接,只在文件内有效。如果不用static限定,那就具有外部链接,对别的文件(当然是同一工程的最终链接到一起的)可见。第二:我实际试验的结果是:如果两文件定义相同名字的全局变量,且均初始化,就会在链接时报错,既然是不同变量,初始化有什么问题呢?(如果不初始化,就没事。)所以,弄得人不知道两个文件中同名全局变量,如果没有初始化,究竟是同一变量还是不同变量。按二楼说法是不同变量。这样我就认为属于不同变量。
不过最好不要这样
或者用static限定一下
===========
报什么错啊?
1>LINK : 没有找到 D:\windows\system32\zywb.ime 或上一个增量链接没有生成它;正在执行完全链接
1>zywb.obj : error LNK2005: _xxx 已经在 setzg.obj 中定义
1> 正在创建库 D:\windows\system32\zywb.lib 和对象 D:\windows\system32\zywb.exp
1>zywb.exp : warning LNK4070: .EXP 中的 /OUT:zywb.dll 指令与输出文件名“D:\windows\system32\zywb.ime”不同;忽略指令
1>D:\windows\system32\zywb.ime : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://e:\b\zywb\zywb\Debug\BuildLog.htm”
1>zywb - 2 个错误,99 个警告
========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过 ==========
要不然大型程序 几万行代码的人 还不得因为命名问题 头疼死呀。。
实际上是 不加extern 就无任何关系
int xxx; 是声明
这种问题没什么好纠结的
养成良好的编程习惯很重要
尽量不要用同名变量
如果有非使用不可的场合就加static做限定
如果你用C++就尽量避免用全局变量
要学会利用名字空间来避免冲突
int xxx; 是声明
+2楼答案