在c中使用extern变量

时间:2017-04-22 17:59:39

标签: c extern

我在c中制作了两个文件,即file1.c file2.c。在file1.c中我写了

#include< stdio.h >                           
 int s=10;                                                                        
 void main()         
 {    
   printf("This is file 1");    
 }

在file2.c

include < stdio.h >                                                             
 extern int s;                                                                
 void main()    {                                                                         
    printf("%d",s);                                                                      
}

当我在ubuntu终端编译file2.c时,我得到了undefined referenced的错误。 如何解决此错误?

2 个答案:

答案 0 :(得分:3)

在第二种情况下,

  extern int s; 

告诉编译器“某处某处”存在一个变量s,其类型为int,但它实际上并没有“定义”该变量。所以,链接器不知道在哪里找到变量,它找不到变量并抛出错误。

您需要在单独的翻译单元(使用extern的目的)或相同的翻译单元(如果需要)中定义变量。

答案 1 :(得分:1)

在file1.c中

until ;

在file2.c

#include <stdio.h>

void myfunction( void );

int s=10;
void myfunction()
{
    printf("This is file 1");
}

然后编译(该示例使用#include <stdio.h> void myfunction( void ); extern int s; int main( void ) { myfunction(); printf("%d",s); }

gcc

然后链接使用:

gcc -g -Wall -Wextra -pedantic -Wconversion -std=gnu11 -c file1.c -o file1.o
gcc -g -Wall -Wextra -pedantic -Wconversion -std=gnu11 -c file2.c -o file2.o

然后将其作为

运行
gcc -g file1.o file2.o -o myexec

当然,如果您使用Visual Studio,命令行语句会略有不同