Think it this way

If you are compiling only one file in which you have declared variable as
intern, where would compiler find its actual definition because you are *not
compiling *the second file.

*file1.c : file in which variable is defined*

*file2.c : file in which variable is declared as extern*

When you compile both the files together, as compiler sees *extern
*declaration,
it will check if you have defined that variable somewhere. It will only
check files that are being compiled*. So if you are not compiling *file1.c *it
will not check that file. That's why you have to compile both the files
together.

In simple words, what extern does is that it checks if you have defined
that variable somewhere* in the code that is *being compiled. *

Try following codes

*//start of code*

*#include<stdio.h>*

*main() {*

*extern int i;*

*printf("i = %d", i);*

*return 0;*


*}*

*//end of code*

It will show you an error that variable i has not been defined anywhere in
the file.

*//start of code*

*#include<stdio.h>*

*main() {*

*extern int i;*

*printf("i = %d", i);*

*return 0;*


*}*

*int i = 7;*

*// end of code*

Try above code, it will run and show you the correct result. Your codes are
doing precisely the same thing.

*#include "file1.c"* or *#include "file2.c"* was based on the same idea.

*scope rules apply.

Some lines of *the* book The C Programming Language by Dennis Ritchie:

There must be only one definition of an external variable among all the
files that make up the

source program; other files may contain extern declarations to access it.
(There may also be

extern declarations in the file containing the definition.) Array sizes
must be specified with

the definition, but are optional with an extern declaration.

*Neeraj Gangwar*
B.Tech. IV Year
Electronics and Communication IDD
Indian Institute of Technology Roorkee
Contact No. : +91 9897073730
On Fri, Nov 16, 2012 at 10:52 PM, rahul sharma <rahul23111...@gmail.com>wrote:

> but with adding it willl copy aalll the code....we we dont need to
> copy..if we declare int i in file 1...and include in file 2..then i can use
> it in file 2 with its extern declaration...m i ryt?
>
>
> On Fri, Nov 16, 2012 at 2:42 PM, Neeraj Gangwar <y.neeraj2...@gmail.com>wrote:
>
>> For Dev-C++, you have to include one file in another.
>> So either add *#include "file1.c" *in file2.c and compile file2.c or add
>> *#include "file2.c" *in file1.c and compile file1.c.
>>
>> Hope this helps.
>>
>>
>> *Neeraj Gangwar*
>> B.Tech. IV Year
>> Electronics and Communication IDD
>> Indian Institute of Technology Roorkee
>> Contact No. : +91 9897073730
>>
>>
>> On Fri, Nov 16, 2012 at 9:11 AM, Rahul Kumar Dubey <rkd7...@gmail.com>wrote:
>>
>>> @rahulsharma
>>>  file1.c
>>>
>>> #include<stdio.h>
>>> extern int i;// defintion provided in this file itself
>>> extern int j; // definition provided in file2
>>> void next()
>>> {
>>> ++i;
>>> other();
>>> }
>>> int main()
>>> {
>>>     ++i;
>>>     printf("%d\n",j);
>>>     printf("%d\n",i);
>>>    next();
>>> }
>>> int i=3;
>>>
>>> // end of file1.c
>>>
>>> file2.c
>>> extern int i; // declaration of i as extern
>>> int j=10; // j defined in file2 here which was declared as extern in
>>> file 1
>>>
>>> void other()
>>> {
>>> ++i;
>>> printf("%d\n",i);
>>> }
>>> // end of file2.c
>>>
>>> compile both file together
>>> as
>>> rahul@rahul:~gcc file1.c file2.c
>>> rahul@rahul:~./a.out
>>> you will get the required output
>>>
>>>
>>>
>>>
>>>
>>> On Fri, Nov 16, 2012 at 8:27 AM, Neeraj Gangwar 
>>> <y.neeraj2...@gmail.com>wrote:
>>>
>>>> That's why you are getting the error. You have to compile both the
>>>> files together. Search on google. I don't use dev c++.
>>>>
>>>> *Neeraj Gangwar*
>>>> B.Tech. IV Year
>>>> Electronics and Communication IDD
>>>> Indian Institute of Technology Roorkee
>>>> Contact No. : +91 9897073730
>>>>
>>>>
>>>> On Thu, Nov 15, 2012 at 11:32 PM, rahul sharma <rahul23111...@gmail.com
>>>> > wrote:
>>>>
>>>>>  No...individually...dev cpp..how to compile both together???
>>>>>
>>>>>
>>>>> On Thu, Nov 15, 2012 at 9:26 PM, Neeraj Gangwar <
>>>>> y.neeraj2...@gmail.com> wrote:
>>>>>
>>>>>> Which compiler are you using ? Are you compiling both the files
>>>>>> together ?
>>>>>>
>>>>>> *Neeraj Gangwar*
>>>>>> B.Tech. IV Year
>>>>>> Electronics and Communication IDD
>>>>>> Indian Institute of Technology Roorkee
>>>>>> Contact No. : +91 9897073730
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Nov 15, 2012 at 9:10 PM, rahul sharma <
>>>>>> rahul23111...@gmail.com> wrote:
>>>>>>
>>>>>>> but how can i use extern..if i simply declare a variable in file1 as
>>>>>>> int j and try to use in file2 with extern then it shows that j nit
>>>>>>> defined..how cum file2 knows in which file j is defined....for e.g if i 
>>>>>>> use
>>>>>>> extern in file it means that this variable/fxn is defined somewhr 
>>>>>>> else.then
>>>>>>> what are those files in which it searches this variable definition..i m
>>>>>>> getting error....plese give me 2 files in which one files defines 
>>>>>>> variable
>>>>>>> and other uses using extern.....its not working for me....
>>>>>>>
>>>>>>> On Thu, Nov 15, 2012 at 12:08 PM, Rahul Kumar Dubey <
>>>>>>> rkd7...@gmail.com> wrote:
>>>>>>>
>>>>>>>> @rahul it will compile perfectly well . note that you have declared
>>>>>>>> j in file 1 as extern and used it and have not provided its definition 
>>>>>>>> any
>>>>>>>> where
>>>>>>>> so getting compile error.
>>>>>>>> as far as functions are concerned they are external by defaullt as
>>>>>>>> specified by @shobhit
>>>>>>>>
>>>>>>>> i am attaching your corrected code which runs fine ...
>>>>>>>> file1.c
>>>>>>>>
>>>>>>>>
>>>>>>>> #include<stdio.h>
>>>>>>>> extern int i;
>>>>>>>> //extern int j; // provide a declaration for this
>>>>>>>> void next(void);
>>>>>>>>
>>>>>>>> int main()
>>>>>>>> {
>>>>>>>>     ++i;
>>>>>>>>     printf("%d\n",i);
>>>>>>>>
>>>>>>>>     next();
>>>>>>>>     getchar();
>>>>>>>> }
>>>>>>>> int i=3;
>>>>>>>> void next()
>>>>>>>> {
>>>>>>>> ++i;
>>>>>>>> printf("%d\n",i);
>>>>>>>> //printf("%d",j); // since no defintion provided so getting error
>>>>>>>> other();
>>>>>>>> }
>>>>>>>>
>>>>>>>> file2.c
>>>>>>>>
>>>>>>>>
>>>>>>>> extern int i;
>>>>>>>> void other()
>>>>>>>> {
>>>>>>>> ++i;
>>>>>>>> printf("%d\n",i);
>>>>>>>> }
>>>>>>>>
>>>>>>>> if you want to use j u need to provide defintion either in file 1
>>>>>>>> or file 2
>>>>>>>> output:
>>>>>>>> 4
>>>>>>>> 5
>>>>>>>> 6
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Oct 24, 2012 at 10:56 PM, rahul sharma <
>>>>>>>> rahul23111...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> can nyone provide me dummy code of how exactly to use extern in
>>>>>>>>> c..
>>>>>>>>> in dev environment
>>>>>>>>>
>>>>>>>>> when i declare int i in one fyl
>>>>>>>>> and try use use with extern int i in another then it doesnt
>>>>>>>>> compile..plz coment
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Oct 24, 2012 at 9:58 PM, rahul sharma <
>>>>>>>>> rahul23111...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Then why its not running?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, Oct 24, 2012 at 6:50 PM, SHOBHIT GUPTA <
>>>>>>>>>> shobhitgupta1...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> http://www.geeksforgeeks.org/archives/840
>>>>>>>>>>>
>>>>>>>>>>> By default, the declaration and definition of a C function have
>>>>>>>>>>> “extern” prepended with them. It means even though we don’t use 
>>>>>>>>>>> extern with
>>>>>>>>>>> the declaration/definition of C functions, it is present there. For
>>>>>>>>>>> example, when we write.
>>>>>>>>>>>
>>>>>>>>>>>     int foo(int arg1, char arg2);
>>>>>>>>>>>
>>>>>>>>>>> There’s an extern present in the beginning which is hidden and
>>>>>>>>>>> the compiler treats it as below.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>     extern int foo(int arg1, char arg2);
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  On Wed, Oct 24, 2012 at 4:40 PM, rahul sharma <
>>>>>>>>>>> rahul23111...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>  Pleaase reply with sol as asp
>>>>>>>>>>>>
>>>>>>>>>>>> Fille 1:
>>>>>>>>>>>>  #include<stdio.h>
>>>>>>>>>>>> extern int i;
>>>>>>>>>>>>
>>>>>>>>>>>> extern int j;
>>>>>>>>>>>> void next(void);
>>>>>>>>>>>> int main()
>>>>>>>>>>>> {
>>>>>>>>>>>> ++i;
>>>>>>>>>>>> printf("%d",i);
>>>>>>>>>>>> next();
>>>>>>>>>>>> getchar();
>>>>>>>>>>>> }
>>>>>>>>>>>> int i=3;
>>>>>>>>>>>> void next()
>>>>>>>>>>>> {
>>>>>>>>>>>>      ++i;
>>>>>>>>>>>>      printf("%d",i);
>>>>>>>>>>>>      printf("%d",j);
>>>>>>>>>>>>     other();
>>>>>>>>>>>>      }
>>>>>>>>>>>> File 2:
>>>>>>>>>>>>  extern int i;
>>>>>>>>>>>>
>>>>>>>>>>>> void other()
>>>>>>>>>>>> {
>>>>>>>>>>>>      ++i;
>>>>>>>>>>>> printf("%d",i)'
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>> How cum file 1 knows what is other();as we havnet define with
>>>>>>>>>>>> extern void other();
>>>>>>>>>>>> it should be error????
>>>>>>>>>>>> but when i include the statemetn extern void other,then also it
>>>>>>>>>>>> shows??
>>>>>>>>>>>> pls provide me o/p of this questiona nd also tell how use use
>>>>>>>>>>>> variable of one file in other as simply writing extern in a is not 
>>>>>>>>>>>> accesing
>>>>>>>>>>>> global a of other file....
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>> Google Groups "Algorithm Geeks" group.
>>>>>>>>>>>> To post to this group, send email to algogeeks@googlegroups.com
>>>>>>>>>>>> .
>>>>>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>>>>>>>> For more options, visit this group at
>>>>>>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>> Google Groups "Algorithm Geeks" group.
>>>>>>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>>>>>>> For more options, visit this group at
>>>>>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>  --
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "Algorithm Geeks" group.
>>>>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>>>>> For more options, visit this group at
>>>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *RAHUL KUMAR DUBEY*
>>>>>>>> *BTech-3rd  year *
>>>>>>>> *Computer Science &Engineering *
>>>>>>>> *Motilal Nehru National Institute Of Technology*
>>>>>>>> *Allahabad[211004],UP.*
>>>>>>>>
>>>>>>>>  --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Algorithm Geeks" group.
>>>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>>>> For more options, visit this group at
>>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Algorithm Geeks" group.
>>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>
>>>>>>
>>>>>>  --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Algorithm Geeks" group.
>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>
>>>>>
>>>>>  --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Algorithm Geeks" group.
>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> algogeeks+unsubscr...@googlegroups.com.
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Algorithm Geeks" group.
>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> algogeeks+unsubscr...@googlegroups.com.
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>
>>>
>>>
>>>
>>> --
>>> *RAHUL KUMAR DUBEY*
>>> *BTech-3rd  year *
>>> *Computer Science &Engineering *
>>> *Motilal Nehru National Institute Of Technology*
>>> *Allahabad[211004],UP.*
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Algorithm Geeks" group.
>>> To post to this group, send email to algogeeks@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to