extern int f(); VS int f();

Karl Heuer karl at haddock.ima.isc.com
Tue Feb 13 07:53:40 AEST 1990


Doug already posted the details, but it might not be clear what the answer is
to the original question.

In article <2912 at hcx1.SSD.CSD.HARRIS.COM> brad at SSD.CSD.HARRIS.COM (Brad Appleton) writes:
>Are the following function declarations equivalent?
>(1)	extern int foo();
>(2)	int foo();

Yes.  They are completely identical in any sane compiler.

>I was just asked this question and I thought I knew a precise answer but
>I find that I am a little fuzzy on this one! I thought (2) is like a
>"forward" declaration in Pascal and that the only difference between these
>two is that If I use (2) then I may define the function "foo" (give it
>a body) later on in the same file. Is this right?

With either spelling, the actual definition for the function can appear in
either the same file or in a different file.  (Some people prefer to use
"extern" for functions defined in separate files and omit "extern" for forward
declarations; this is a matter of taste.)  But it must be a global function.
To forward-declare a static function%, you should use "static int foo();".

When dealing with objects rather than functions, the situation gets worse.

Karl W. Z. Heuer (karl at ima.ima.isc.com or harvard!ima!karl), The Walking Lint
________
% There may be some compilers that won't let you forward-declare a static
  function.  If you have to deal with such a beast, it's probably best to sort
  the function definitions (if they aren't mutually recursive) or promote one
  of them from static to global so you can forward-declare it.



More information about the Comp.lang.c mailing list