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

4 ответа

Решение

Так как __uint128_t type является расширением GCC, поэтому, вероятно, нужно проверить наличие известной версии GCC.

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

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

#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

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

Найдите свой cc1 в дереве /usr/libexec/gcc, а затем опросите его:

$ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t
__uint128_t (или нет)
Другие вопросы по тегам