[Top][All Lists]
[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