static/extern 在源文件中有什么用?

What's the use of static/extern in source files?

对于编译多个文件时会发生什么,我有一个非常复杂的概念——主要是涉及到从一个文件到另一个文件的可见性。根据我的阅读,static 将变量或函数的范围限制为文件本身。 extern 则相反。由此我希望能够并且简单地从任何文件中读取 global extern。尽管如下所示,但这在实践中不起作用。

main.c:

#include <stdio.h>

int main(void){
    printf("%d\n", b); // b is extern global
    return 0;
}

a.c:

static int a = 40;

b.c:

extern int b = 20;

我连编译都不会:

> gcc main.c a.c b.c -o test
b.c:1:12: warning: ‘b’ initialized and declared ‘extern’ [enabled by default]
 extern int b = 20;
            ^
main.c: In function ‘main’:
main.c:4:20: error: ‘b’ undeclared (first use in this function)
     printf("%d\n", b); // b is extern global

如果声明或定义了变量,则可以使用该变量。

main.c中,没有b的声明。您可以添加

extern int b;

in main.c 以便编译器能够使用 b。这向编译器声明 b 在其他地方定义并且它是 int.

类型

b.c中,您可以删除extern这个词。除非符合static,否则默认为extern

int b = 20;

即使在b.c中,您也可以在文件顶部使用声明并在底部定义它。

extern int b;

//
// ... code that uses b
//

int b = 20;

extern 行只是声明了变量。最后一行定义变量。

当你有一个 extern 变量时,编译器知道这个变量的声明在这里,定义在别处。

所以你可以如下图做

some.h

   extern int b;  /* Declare the variable */

b.c

   int b = 20;  /* Define the variable */

main.c

    #include<some.h>

    int main()
    {
       printf("%d\n",b);  /* Use the variable b */

       return 0;
    }

有了这个,文件 main.c 知道了 b 的声明,因为那里有 some.h 文件。

你正在做我们写的所有 wrong.When extern int b 这意味着一个名为 b 的整数类型变量已经 declared.And 我们可以根据需要多次声明. (记住,声明可以进行任意次)。通过外部变量,我们可以在程序的任何地方使用变量,前提是我们知道它们的声明并且变量在某处定义。

正确的做法是

main.c:

#include <stdio.h>

extern int b;   //declaration of b
 int main(void){
    printf("%d\n", b); // using b 
    return 0;
}

b.c:

int b = 20;   //definition here

并编译为 gcc main.c b.c -o test

我省略了 a.c,因为它在这个例子中什么也没做。 要了解有关外部人员的更多信息,请参阅此 site.Its 内容非常好 http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/