We can use the preprocessor to know if unsigned long long
is defined:
#include <limits.h>
#ifndef ULLONG_MAX
typedef unsigned long t_mask;
#else
typedef unsigned long long t_mask;
#endif
But how to know if __uint128_t
is defined?
You can try the following. I do not know how reliable this is, but it might be the easiest way.
#ifdef __SIZEOF_INT128__
// do some fancy stuff here
#else
// do some fallback stuff here
#endif
find your cc1 in the /usr/libexec/gcc tree, then interrogate it:
$ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t __uint128_t (or not)
I have not yet dealt with __uint128_t, but based on existing pattern usage, I would expect the following.
#include <stdint.h>
#ifndef UINT128MAX
#error "__uint128_t not defined"
#endif
Hope this helps
Since the __uint128_t
type is a GCC extension, the proper thing to do is probably to check for some known-good version of GCC.
See this page for information about the macros used to version-check the GCC compiler.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With