Search code examples
cextern

Use of extern variable in c


I have made two files in c i.e. file1.c file2.c. In file1.c I wrote

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

In file2.c

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

When I compiled file2.c in ubuntu terminal I got undefined referenced to s error. How can I resolve this error?


Solution

  • In file1.c

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

    In file2.c

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

    then compile (the example uses 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
    

    then link using:

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

    then run it as

    ./myexec
    

    Of course, if your using Visual Studio, the command line statements will be slightly different