compiling multiple source files and static functions

  • Follow


Hi,

I'm compiling multiple source files which hold some static
functions(). The compiler `gcc' won't compile them and spit's errors
like: 

warning: `cmpr' defined but not used
 undefined reference to `cmpr'

What options should I give gcc to make sure that it knows that the
static functions are used within the same program ?

Thnkx.. a lot.

Beetle.
0
Reply beetle 1/28/2005 1:49:14 PM

beetle wrote:
> Hi,
> 
> I'm compiling multiple source files which hold some static
> functions(). The compiler `gcc' won't compile them and spit's errors
> like: 
> 
> warning: `cmpr' defined but not used
>  undefined reference to `cmpr'
> 
> What options should I give gcc to make sure that it knows that the
> static functions are used within the same program ?
> 
> Thnkx.. a lot.
> 
> Beetle.

Um, if it is a static function and not referenced within that source 
file than it can't be used (it isn't available to the linker, other
translation units don't know about it).  Only way a static function
can normally be used outside its file is if you passed a pointer to it
back via some function, in which case gcc wouldn't gripe.  That said,
I think you are looking for the gcc unused attribute:.

#include <stdio.h>
static void  dead_func(void) __attribute__ ((unused));
int main(void)
{
   puts("hello world");
   return 0;
}
static void dead_func(void)
{
   puts("I don't get called");
}

Above gets no complaints with -Wall.

-David

0
Reply David 1/28/2005 2:07:39 PM


beetle <beetle@beetle.com> wrote:
> I'm compiling multiple source files which hold some static
> functions(). The compiler `gcc' won't compile them and spit's errors
> like: 

> warning: `cmpr' defined but not used
>  undefined reference to `cmpr'

> What options should I give gcc to make sure that it knows that the
> static functions are used within the same program ?

Functions with a static qualifier are only visible within the source
file they are defined in. If you have e.g. a static function called
cmpr() defined in source file A.c then the compiler may warn you if
cmpr() ins't used in A.c - the static qualifier renders the function
useless in this case since it can only be used in A.c but you don't
use it there. If you try to call the function from another source
file B.c the linker will tell you that it does not know anything
about cmpr() (that's the "undefined reference" error message) because
the function is only visible within A.c. an from nowhere else.

There can't be any options to gcc (or any other correctly working
C compiler and linker) to get rid of the error messages because
that's what static when applied to a function means in C (similarly,
global variables with a static qualifier are also only visible with-
in the source file they are defined in). If you want the function
to be visible from B.c while it's defined in A.c you can't make it
a static function. Or, if it only is used in B.c and nowhere else,
move it to B.c
                                  Regards, Jens
-- 
  \   Jens Thoms Toerring  ___  Jens.Toerring@physik.fu-berlin.de
   \__________________________  http://www.toerring.de
0
Reply Jens 1/28/2005 2:19:20 PM

On 28 Jan 2005 14:19:20 GMT, Jens.Toerring@physik.fu-berlin.de wrote:

> beetle <beetle@beetle.com> wrote:
> > I'm compiling multiple source files which hold some static
> > functions(). The compiler `gcc' won't compile them and spit's errors
> > like: 
> 
> > warning: `cmpr' defined but not used
> >  undefined reference to `cmpr'
> 
> > What options should I give gcc to make sure that it knows that the
> > static functions are used within the same program ?
> 
> Functions with a static qualifier are only visible within the source
> file they are defined in. If you have e.g. a static function called
> cmpr() defined in source file A.c then the compiler may warn you if
> cmpr() ins't used in A.c - the static qualifier renders the function
> useless in this case since it can only be used in A.c but you don't
> use it there. If you try to call the function from another source
> file B.c the linker will tell you that it does not know anything
> about cmpr() (that's the "undefined reference" error message) because
> the function is only visible within A.c. an from nowhere else.
> 
> There can't be any options to gcc (or any other correctly working
> C compiler and linker) to get rid of the error messages because
> that's what static when applied to a function means in C (similarly,
> global variables with a static qualifier are also only visible with-
> in the source file they are defined in). If you want the function
> to be visible from B.c while it's defined in A.c you can't make it
> a static function. Or, if it only is used in B.c and nowhere else,
> move it to B.c
>                                   Regards, Jens

Okidoki... that certainly answerd the question.. Thnkx.!!

Beetle..
0
Reply beetle 1/28/2005 2:49:26 PM

3 Replies
203 Views

(page loaded in 0.048 seconds)

Similiar Articles:













7/27/2012 9:20:57 AM


Reply: