unsigned long long
が定義されているかどうかを知るために、プリプロセッサを使用できます。
#include <limits.h>
#ifndef ULLONG_MAX
typedef unsigned long t_mask;
#else
typedef unsigned long long t_mask;
#endif
しかし、__uint128_t
が定義されているかどうかを知る方法は?
unsigned long long
が定義されているかどうかを知るために、プリプロセッサを使用できます。
#include <limits.h>
#ifndef ULLONG_MAX
typedef unsigned long t_mask;
#else
typedef unsigned long long t_mask;
#endif
しかし、__uint128_t
が定義されているかどうかを知る方法は?
以下を試すことができます。これがどれほど信頼できるかはわかりませんが、これが最も簡単な方法かもしれません。
#ifdef __SIZEOF_INT128__
// do some fancy stuff here
#else
// do some fallback stuff here
#endif
私はまだ __uint128_t を扱っていませんが、既存のパターンの使用法に基づいて、次のことが予想されます。
#include <stdint.h>
#ifndef UINT128MAX
#error "__uint128_t not defined"
#endif
お役に立てれば
/usr/libexec/gcc ツリーで cc1 を見つけて、問い合わせます。
$ 文字列 /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t __uint128_t (またはそうでない)