Как узнать, определена ли __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?

7
30 авг. '13 в 14:27
источник поделиться
4 ответов

Так как тип __uint128_t является расширением GCC, правильная вещь, вероятно, должна проверять некоторую хорошо известную версию GCC.

См. эту страницу для получения информации о макросах, используемых для проверки версии компилятора GCC.

3
30 авг. '13 в 14:32
источник

Вы можете попробовать следующее. Я не знаю, насколько это надежно, но это может быть самый простой способ.

#ifdef __SIZEOF_INT128__
    // do some fancy stuff here
#else
    // do some fallback stuff here
#endif
7
01 июня '14 в 17:42
источник

Я еще не рассматривал __uint128_t, но, основываясь на существующем использовании шаблонов, я ожидал бы следующего.

#include <stdint.h>

#ifndef UINT128MAX
    #error "__uint128_t not defined"
#endif

Надеюсь, что это поможет

5
30 авг. '13 в 15:14
источник

найдите ваш cc1 в дереве /usr/libexec/gcc, затем выполните опрос:

$ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t
__uint128_t            (or not)
1
09 мая '16 в 5:04
источник

Посмотрите другие вопросы по меткам или Задайте вопрос