Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #58047

Re: Is there any way to make a function local to two TUs without including it as static in both?

From Les Cargill <lcargill99@comcast.com>
Newsgroups comp.lang.c
Subject Re: Is there any way to make a function local to two TUs without including it as static in both?
Date 2015-03-09 19:58 -0500
Organization A noiseless patient Spider
Message-ID <mdlf9v$359$1@dont-email.me> (permalink)
References <5bnrfahtskm5osi399eb9954bleglspe2k@4ax.com>

Show all headers | View raw


DSF wrote:
> Hello!
>
> Is there any way to make a function local to two TUs without including
> it as static in both?
>

The *identical* function? Or just "same name, same signature"?

You can have a pointer to a static function that is also static and
local to both.

I would also not consider having a slight difference in naming between 
two global functions in two TUs to be too sinful.

>    Note that this question is not "life or death."  I can leave said
> function in its own TU and declared public.  I ask for reasons of
> learning and "correctness."  (The function need only be seen by the
> two TUs, thus it would be logical for the symbol to be private to
> them.)
>
>    I have a function in its own TU that is used exclusively by two
> other TUs.  I know I can make it private by declaring it static within
> the TUs and placing it in them, but then there would be two copies.
>

So:

static int thing(void *a, int b, void *x)
{
....
    return 0;
}

int (*getRefToThing) (void *a, int b, void *x)
{
     return &thing;
}

I always make mistakes on these so it may take a bit of massaging
to get the compiler to cease jabbering.

>
>    On a related subject, if there were the same scenario as above, but
> only one TU and I wanted to keep the static function in its own file
> for clarity, would it be bad form to declare it in the first TU as
> static and then include it into the main TU?  Such as:
>
> -------------------------------------------------------
> /* first TU * (foo.c) /
>
> static int bar(int a, char *c);
>
> #include "bar.c"
>
> void foo(void)
> {
> ...
>    d = bar(number, string);
> ...
> }
> -----------------------------------------------------
> /* "private" TU (bar.c) */
>
> int bar(int a, char *c)
> {
> ...
> }
>
>    "bar.c" would be considered part of the TU "foo.c," right?
>
> DSF
> "'Later' is the beginning of what's not to be."
> D.S. Fiscus
>

'C' files including 'C' files gives some people rash. I am not one
of those people. And there's the question of how to manage the
dependencies of the included 'C' file - nothing huge, just a bit
of work. Do the includers have to include all the includes or what?

"gcc -M" doesn't care if it's a .c file.

-- 
Les Cargill

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Is there any way to make a function local to two TUs without including it as static in both? DSF <notavalid@address.here> - 2015-03-09 15:02 -0400
  Re: Is there any way to make a function local to two TUs without including it as static in both? James Kuyper <jameskuyper@verizon.net> - 2015-03-09 15:22 -0400
    Re: Is there any way to make a function local to two TUs without including it as static in both? Richard Heathfield <rjh@cpax.org.uk> - 2015-03-09 19:34 +0000
  Re: Is there any way to make a function local to two TUs without including it as static in both? Keith Thompson <kst-u@mib.org> - 2015-03-09 12:47 -0700
    Re: Is there any way to make a function local to two TUs without including it as static in both? Richard Heathfield <rjh@cpax.org.uk> - 2015-03-09 21:33 +0000
      Re: Is there any way to make a function local to two TUs without including it as static in both? Keith Thompson <kst-u@mib.org> - 2015-03-10 07:28 -0700
        Re: Is there any way to make a function local to two TUs without including it as static in both? Richard Heathfield <rjh@cpax.org.uk> - 2015-03-10 14:59 +0000
          Re: Is there any way to make a function local to two TUs without including it as static in both? Keith Thompson <kst-u@mib.org> - 2015-03-10 10:37 -0700
            Re: Is there any way to make a function local to two TUs without including it as static in both? Richard Heathfield <rjh@cpax.org.uk> - 2015-03-10 18:45 +0000
  Re: Is there any way to make a function local to two TUs without including it as static in both? Lőrinczy Zsigmond <nospam@for.me> - 2015-03-09 21:04 +0100
  Re: Is there any way to make a function local to two TUs without including it as static in both? August Karlstrom <fusionfile@gmail.com> - 2015-03-09 21:39 +0100
  Re: Is there any way to make a function local to two TUs without including it as static in both? Kaz Kylheku <kaz@kylheku.com> - 2015-03-09 21:20 +0000
  Re: Is there any way to make a function local to two TUs without including it as static in both? Robert Wessel <robertwessel2@yahoo.com> - 2015-03-09 19:23 -0500
    Re: Is there any way to make a function local to two TUs without including it as static in both? wssimms@gmail.com - 2015-03-09 21:42 -0700
      Re: Is there any way to make a function local to two TUs without including it as static in both? Robert Wessel <robertwessel2@yahoo.com> - 2015-03-10 04:52 -0500
    Re: Is there any way to make a function local to two TUs without including it as static in both? Keith Thompson <kst-u@mib.org> - 2015-03-10 07:35 -0700
      Re: Is there any way to make a function local to two TUs without including it as static in both? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-03-10 12:53 -0700
  Re: Is there any way to make a function local to two TUs without including it as static in both? Les Cargill <lcargill99@comcast.com> - 2015-03-09 19:58 -0500
    Re: Is there any way to make a function local to two TUs without including it as static in both? Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-24 13:06 -0700
      Re: Is there any way to make a function local to two TUs without including it as static in both? Les Cargill <lcargill99@comcast.com> - 2015-03-24 20:03 -0500
        Re: Is there any way to make a function local to two TUs without including it as static in both? James Kuyper <jameskuyper@verizon.net> - 2015-03-25 10:26 -0400
        Re: Is there any way to make a function local to two TUs without including it as static in both? Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-25 10:36 -0700
          Re: Is there any way to make a function local to two TUs without including it as static in both? Kaz Kylheku <kaz@kylheku.com> - 2015-03-25 17:47 +0000
            Re: Is there any way to make a function local to two TUs without including it as static in both? Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-25 16:03 -0700
      Re: Is there any way to make a function local to two TUs without including it as static in both? Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-25 10:28 -0700
        Re: Is there any way to make a function local to two TUs without including it as static in both? Kaz Kylheku <kaz@kylheku.com> - 2015-03-25 17:46 +0000
          [OT] Re: meaning of "signature" in other languages Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-25 16:01 -0700
        Re: Is there any way to make a function local to two TUs without including it as static in both? Tim Rentsch <txr@alumni.caltech.edu> - 2015-03-28 09:05 -0700

csiph-web