两个相同名称的静态变量(两个不同的文件)和其他任何文件中的外部变量

Ope*_*ner 3 c static extern

在一个文件中将变量声明为静态并在另一个文件中执行extern声明 - 我认为这会在链接时出错,因为在任何对象中都不会看到extern变量,因为在其他文件中声明的变量是静态的.但不知何故,链接器(瑞萨)没有显示任何错误并创建了可执行文件.

如果上面的用例是正确的,如果2个变量在2个不同的文件中声明为静态而另一个在另一个带extern声明的文件中会发生什么?在这种情况下,将在2个不同的对象中创建2个不同的存储器,但是哪个变量将被链接用于其他变量,在另一个文件中被声明为extern(因为两个变量名都相同)?

在file1.c

static int test_var;
fn1()
{
   test_var = 1;
}    
Run Code Online (Sandbox Code Playgroud)

file2.c中

static int test_var;
fn2()
{
   test_var = 2;
}
Run Code Online (Sandbox Code Playgroud)

file3.c中

extern int test_var;
fn3()
{
   int x;
   x = test_var;
}
Run Code Online (Sandbox Code Playgroud)

Fid*_*its 5

在你的榜样,file3.c具有绝对没有访问变量test_var在任一file1.cfile2.c.如果test_var未在范围内声明,则应该收到链接错误file3.c.