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

5
задан Keine Lust 30 авг. '13 в 14:27
источник поделиться

4 ответов

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

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

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

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

#ifdef __SIZEOF_INT128__
    // do some fancy stuff here
#else
    // do some fallback stuff here
#endif
5
ответ дан firefexx 01 июня '14 в 17:42
источник поделиться

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

#include <stdint.h>

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

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

3
ответ дан Sparky 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
ответ дан crashulator 09 мая '16 в 5:04
источник поделиться

Другие вопросы по меткам