在一个文件中将变量声明为静态变量并在另一个文件中进行外部声明 - 我认为这会在链接时出错,因为在任何对象中都不会看到外部变量,因为在其他文件中声明的变量是带有静态限定词。但是不知何故,链接器(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_var
或 file2.c
。如果 test_var
未在 file3.c
范围内声明,您应该会收到链接错误。
关于c - 同名的两个静态变量(两个不同的文件)和外部其中一个在任何其他文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595371/