对于多个CPP中存在相同弱名称的情况下,g++链接的时候是不会提示错误的。
另外,如果一个CPP中存在强名称a,另一个CPP中存在弱名称a,则弱名称a在链接时会引用到强名称a的地址。
只有当两个CPP中都存在强名称a都时候,链接才会出错。
针对第二条,这个规则会引发一个比较严重的隐患。
例如
A.cpp
#include "b.cpp"
int a = 10;
int b= 20;
int main()
{
fun();
}
b.cpp
double a;
void fun()
{
a = 0.0;
}
这种情况下,b.cpp中都a引用了a.cpp中int a的地址,因此func中对于double a都操作会影响到a.cpp中int a和int b两个变量的值,还是挺危险的,最主要还不是很容易查到这样的BUG,特别是在大型工程中。