declarations in include files: how do YOU feel?

Tim McDaniel mcdaniel at uicsrd.csrd.uiuc.edu
Fri May 19 15:10:22 AEST 1989


In article <5178 at bunker.UUCP> garys at bunker.UUCP (Gary M. Samuelson) writes:
>Note that the context of this discussion was the assertion that
>changing a function to a macro in some library could be done "behind
>the scenes;" i.e., without the user needing to be aware of the change.

I think it *can* be done.  Changing a function to a macro must be
considered carefully, as with any proposed optimization.  In other
words, will it really be an optimization, or a problem?  *Any* change
can break code.

- Was the function ever called with arguments with side effects?  If
  so, will the side effects get evaluated exactly once?
- Is the product "macro size (in bytes of machine code)" * "lexical
  number of calls per program" large?  How does "macro size" compare
  with "function call size"?
- Were users ever likely to put the function name in jump tables?  If so,
  are their compilers ANSI C compliant: if a macro name is not
  followed by "(", is it an error?
- Who are the users?  Dave and Perry down the hall, who know to come
  to you if they have any problems with -lcsrd, or all of SUN's UNIX
  customers?
- Have you documented the change?

>>That way, it's in lib.h as a macro and lib.a as a function.
>
>Then it hasn't been *replaced*, has it?

Hidden, in the sense of variable hiding:
        {int i; ... {int i; ... }}

>Having the same symbol be both a macro and a function in the same
>file belongs only in Obfuscated C contest entries.

I think there's something in the ANSI C standard about this -- if
library functions are implemented as macros or builtins, perhaps?
I think #undef is officially blessed for such a case, but I can't
remember any details and I can't find it in K&R2.  I guess we just
have different tastes in coding styles.

>>Personally, I use pointers to functions so infrequently...
>
>We are talking about libraries, which are supposed to be used
>by lots of people, and therefore should not cater to personal style.

Let me rephrase.  "Personally" == "I'd like to know the practices of
all the C programmers in the world, but I don't, so I can only list my
own experiences."  I've see 3 function jump tables in my C programming
life, all of which included only program-defined functions (none out
of any libraries), 2 of which could have had lists of #undefs added
mechanically.

As for "lots of people" using libraries: when I think of "libraries",
I think of everything from libc.a (millions of users, indirectly) down
to libcsrd.a (a local library; dozens of users, maybe).  Changing
function -> macro works FAR better on a local scale.

Looking at your last response, Gary, I'd say we are in substantial
agreement about the basic issues involved.

--
"6:20 O Timothy, keep that which is committed to thy trust, avoiding
profane and vain babblings, and oppositions of science falsely so
called: 6:21 Which some professing have erred concerning the faith."

Tim, the Bizarre and Oddly-Dressed Enchanter  |  mcdaniel at uicsrd.csrd.uiuc.edu
            {uunet,convex,pur-ee}!uiucuxc!uicsrd!mcdaniel
            mcdaniel%uicsrd@{uxc.cso.uiuc.edu,uiuc.csnet}



More information about the Comp.lang.c mailing list