这里我有两个文件。在第一个文件中,我在文件范围内声明externdemo1.c并externdemo2.c初始化了一个字符数组arr。但是我在第二个文件中声明了它,externdemo2.c没有extern关键字,并在函数中使用它display()。这是我由此引起的困惑。请回答这三个:
//File No.1--externdemo1.c
#include<stdio.h>
#include "externdemo2.c"
extern int display();
char arr[3]={'3','4','7'};
//extern char arr[3]={'3','4','7'};
//extern int main()
int main()
{
printf("%d",display());
}
//File No.2--externdemo2.c
char arr[3];
int display()
{
return sizeof(arr);
}
1)为什么即使我在arr没有extern关键字 in的情况下声明程序也能正常编译externdemo2.c?我读过函数的默认链接是外部的,但我不确定变量是否也是如此。我只知道全局变量有extern存储班级。
2)extern storage class和之间的严格区别是什么extern linkage。我非常需要澄清这一点。在第一个文件中,我定义了数组arr,我没有使用关键字extern,但我知道它默认有extern storage类。但是在第二个文件,是不是有任何默认extern的,存储类或链接,关于全局变量arr,即在externdemo2.c?
3)检查第一个文件中注释掉的行。只是externdemo1.c为了测试它,我使用了该行extern char arr[3]={'3','4','7'};。但是它给出了错误。'arr' initialized and declared 'extern'这个错误是什么意思?我还提到了一个注释行extern int main(),但它工作正常,没有错误或警告。那么为什么我们可以使用extern一个函数,即使一个函数是extern默认的,而不是一个变量,就像arr这里?
请花一些时间来帮我解决这个问题。它会清除我对整个事情的大部分挥之不去的疑虑。如果你能回答所有 3 位1)、2) 和 3),extern这将是巨大的帮助。Especially 3) is eating my brains out