Home > Archive > Unix Programming > January 2005 > compiling multiple source files and static functions
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
compiling multiple source files and static functions
|
|
| beetle 2005-01-28, 4:00 pm |
| 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.
| |
| David Resnick 2005-01-28, 4:00 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
| |
| Jens.Toerring@physik.fu-berlin.de 2005-01-28, 4:00 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
| |
| beetle 2005-01-28, 4:00 pm |
| On 28 Jan 2005 14:19:20 GMT, Jens.Toerring@physik.fu-berlin.de wrote:
> beetle <beetle@beetle.com> wrote:
>
>
>
> 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..
|
|
|
|
|