qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [5466] Only use __builtin_* with GCC >= 3.4


From: Jamie Lokier
Subject: Re: [Qemu-devel] [5466] Only use __builtin_* with GCC >= 3.4
Date: Sun, 12 Oct 2008 16:33:39 +0100
User-agent: Mutt/1.5.13 (2006-08-11)

Avi Kivity wrote:
> It's illegal to define or use an identifier beginning with two 
> underscores, unless it's documented by the implementation.  What if 
> glibc adds a third argument?  All your apps wil break.
> 
> You should define your own macros for this, with a non-__ name.

I agree.  Portable apps especially should use their own names.

Same applies with just one underscore, I think: they're reserved in
the "implementation" namespace.

But I'd add that avoiding underscore is advisable but not a guarantee.
Sometimes Glibc defines a new macro/variable/function _without_ the
preceding underscore, when you've requested all Glibc extensions by
defining _GNU_SOURCE.  It's not likely for this macro, and conflicts
are obviously much more likely with underscore prefixes.

I've also seen ugly link-time or run-time errors: E.g. defining a
function called `dprintf' or `warn' in the app can break some parts of
Glibc at run-time, with no compile-time error.

This is awkward for third party _libs_ used with a lot of other libs
and apps, as the only realistic protection comes from making sure
every non-static symbol (including internal-use-only ones) has a
prefix that no other lib or app is likely to use.  Fingers crossed.
Once you're dependent on prefix uniqueness, it's a matter of debate or
maybe taste whether using `_myownlib_symbol' (i.e. underscore prefix
before unique prefix) is advisable for internal-use-only names.

-- Jamie






reply via email to

[Prev in Thread] Current Thread [Next in Thread]