c - 同名的两个静态变量(两个不同的文件)和外部其中一个在任何其他文件中

标签 c static extern

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

如果上面的用例是正确的,如果 2 个变量在 2 个不同的文件中声明为 static 而另一个在另一个文件中声明为 extern 声明,会发生什么?在这种情况下,将在 2 个不同的对象中创建 2 个不同的内存,但是哪个变量将链接到另一个变量在另一个文件中声明为 extern(因为两个变量名称相同)??

文件1.c

static int test_var;
fn1()
{
   test_var = 1;
}    

文件2.c

static int test_var;
fn2()
{
   test_var = 2;
}

文件3.c

extern int test_var;
fn3()
{
   int x;
   x = test_var;
}

最佳答案

在您的示例中,file3.c 绝对 无法访问 file1.c 中的变量 test_varfile2.c。如果 test_var 未在 file3.c 范围内声明,您应该会收到链接错误。

关于c - 同名的两个静态变量(两个不同的文件)和外部其中一个在任何其他文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595371/

相关文章:

c - 如何使用相同的函数初始化相似的结构?

java - 如何在访问公共(public)静态最终变量时设置断点?

C++ 外部 : pointer vs. 引用

java - 调用静态方法后重用类

c - 如何静态编译ps(procps)

c - C99 inline 背后的想法是什么?

c++ - .h 文件应该是与外部函数的接口(interface);如何在包含标题的.cc 文件中定义?

c - GTK+ 海湾合作委员会 : undefined reference to all gtk functions when linking

c - 如何分配和重新分配内存?

创建 IWebBrowser2 控件