cvs commit: src/share/man/man9 style.9

David Schultz das at FreeBSD.ORG
Wed Jul 9 15:46:56 UTC 2008


On Wed, Jul 09, 2008, Daniel Gerzo wrote:
> -Do not declare functions inside other functions; ANSI C says that
> -such declarations have file scope regardless of the nesting of the
> -declaration.
> -Hiding file declarations in what appears to be a local
> -scope is undesirable and will elicit complaints from a good compiler.
> +Do not declare functions inside other functions; nested functions are
> +a GCC extension and are not permitted by ANSI C.

We use lots of extensions that aren't strict ANSI C. I think the
real reason not to use them is that gcc's nested functions are
particularly unwieldily. First, they're not true lexical closures
(and can't be), which makes them much less useful. Second, they
are unsupported unless a number of assumptions are met, e.g., must
have an executable stack, must be able to invalidate the I cache
from userland, and must not have separate I and D address spaces.
Nested functions abominable enough that Apple disabled the feature
in OS X's build of gcc --- and the Sun and Intel compilers don't
support them, even though Intel claims nearly complete gcc
compatibility.


More information about the cvs-src mailing list