Date: Fri, 7 Jul 2000 09:19:10 -0500 From: "Jim King" <king@sstar.com> To: "Thomas David Rivers" <rivers@dignus.com>, <gram@cequrux.com> Cc: <freebsd-stable@FreeBSD.ORG> Subject: Re: Any chance of changing struct member names in nameser.h? Message-ID: <003d01bfe81e$553eb8a0$a44b8486@jking> References: <200007071320.JAA86645@lakes.dignus.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Thomas David Rivers wrote:
> > > > Actually, I was wronng - the nameser.h in contrib/bind is fine. But
the
> > > > one in include/arpa/nameser.h is not, so this *is* specific to
> > > > FreeBSD/KAME...
> > >
> > > imho, the right way to handle this is in your source, using an 'extern
"C"'
> > > directive to tell the compiler that it's including a C header and not
a C++
> > > header. e.g.
> > >
> > > extern "C" {
> > > #include <header_with_cpp_bogons.h>
> > > }
> > >
> > > If the #include directive is in another header file that might be used
in
> > > both C and C++ programs you'd probably want to put some '#ifdef
__cplusplus'
> > > around the extern's. See section 9.2.4 in Stroustrup 3rd edition for
a good
> > > example.
> >
> > Great idea, except I thought of that long ago and it doesn't work.
> >
> > gram
>
> Nope - it wouldn't.
>
> extern "C" doesn't mean
>
> "The following source is C code"
>
> what it means is that any external linkage generated will use C
> linkage conventions. For most C++ implementations, this means
> "don't mangle function names".
>
> The source within an `extern "C"' block has to be parsable by
> the C++ parser... it's still C++.
>
> For example, you can't say:
>
> extern "PASCAL" {
> ... pascal source ...
> }
>
> and expect that to work...
>
>
> That's my understanding of how this works, anyway...
You're right, my bad. Son of a gun, I've used 'extern "C"' for gobs of
stuff but I guess I never ran into C header files that had C++ reserved
words.
In that case, although it's considerably more work I'd take a look at
writing some C wrappers around the offending stuff. You could write the
wrappers such that they'd compile with the offending include file, and be
callable from C++. Sounds tedious and time consuming, but it might be
quicker than waiting for someone to fix the headers in question.
Jim
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?003d01bfe81e$553eb8a0$a44b8486>
