Am Freitag, den 08.02.2013, 13:55 -0500 schrieb Rich Felker: > This kind of macro intentionally isn't provided, ... > > My position, and the position of most people involved with the > project, is that applications should test for features (e.g. with a > configure script or standardized per-feature macros defined in > headers) rather than hard-coding assumptions about which version of an > OS/library has which features. (Note that, in the OS case, screwing > this up has broken packages that assumed Linux version X lacks > behavior Y, when a particular distribution backported behavior Y to > version X.) I would completely subscribe to that logic. I see that on the compiler side that it is much easier to work with clang's has_feature (etc) that just with version numbers as gcc does, and where basically all immitations of gcc get it wrong in some place. That said, I think it would be better in turn not to rely on just that kind of logic to provide extension features of other libraries. This __GNUC_SOURCE thing is exactly a way how these things then go wrong. > > I'd like to distinguish the platform as early as possible, ideally > > *before* I include any files, such that I can base decisions on which > > files to include only on #defines that the pure compiler provides. > > I'm not sure how you can determine with just the standard macros that > you're on a POSIX or POSIX-like system where you have unistd.h... Sure, usually you have to provide that information on the commandline or through extensions (such as -std=gnu99). On POSIX systems you have the getconf tool that provides reliable information about the system: getconf _POSIX_VERSION should always work. I probably have to review my include ordering a bit, currently I set __GNUC_SOURCE *before* including unistd.h. I understood from their docs that this is the way it is meant to be. Only by having it defined before, I will in fact see the extensions they provide. Jens -- :: INRIA Nancy Grand Est :: http://www.loria.fr/~gustedt/ :: :: AlGorille ::::::::::::::: office Nancy : +33 383593090 :: :: ICube :::::::::::::: office Strasbourg : +33 368854536 :: :: ::::::::::::::::::::::::::: gsm France : +33 651400183 :: :: :::::::::::::::::::: gsm international : +49 15737185122 ::