[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: New feature-testing macros in <sys/cdefs.h>
- Subject: Re: New feature-testing macros in <sys/cdefs.h>
- From: "Kamil Rytarowski" <n54%gmx.com@localhost>
- Date: Thu, 5 Feb 2015 00:00:58 +0100
> Clang ships with fine-grained useful macros for checking
> whether a feature is supported. Instead of redefining them
> in the other places, I propose to put them in a central
> place in <sys/cdefs.h>.
> GCC 5.0 ships with __has_include, for now it's skipped
> as GCC 5.0 isn't released.
> diff --git a/sys/cdefs.h b/sys/cdefs.h
> index 02ea4b3..f850655 100644
> --- a/sys/cdefs.h
> +++ b/sys/cdefs.h
> @@ -55,6 +55,41 @@
> #define __GNUC_PREREQ__(x, y) 0
> + * Macro to test if we're using a compiler with specific:
> + * - features,
> + * - extensions,
> + * - attributes,
> + * - builtins.
> + *
> + * Usage:
> + *
> + * #if __has_builtin(__builtin_popcount)
> + * return __builtin_popcount(x);
> + * #else
> + * int count = 0;
> + * for (; x != 0; x &= x - 1)
> + * count++;
> + * return count;
> + * #endif
> + */
> +#ifndef __has_feature
> +#define __has_feature(x) 0
> +#ifndef __has_extension
> +#define __has_extension(x) 0
> +#ifndef __has_attribute
> +#define __has_attribute(x) 0
> +#ifndef __has_builtin
> +#define __has_builtin(x) 0
> #include <machine/cdefs.h>
> #ifdef __ELF__
> #include <sys/cdefs_elf.h>
Any comments? Someone for or against of use of these macros?
I'm about to propose a library for overflows, which reuses these symbols,
instead of depending on the hard-coded Clang checks.
Every compiler is free to support this or that builtin,
without playing a role of GCC/Clang.
Actually __has_include() is fine, as it's already in Clang.
Main Index |
Thread Index |