如何知道是否定义了__uint128_t

我们可以使用预处理器来知道是否定义了unsigned long long

 #include  #ifndef ULLONG_MAX typedef unsigned long t_mask; #else typedef unsigned long long t_mask; #endif 

但是如何知道是否定义了__uint128_t?

由于__uint128_t类型是GCC扩展 ,正确的做法可能是检查一些已知良好版本的GCC。

有关用于版本检查GCC编译器的宏的信息, 请参阅此页面 。

您可以尝试以下方法。 我不知道这有多可靠,但它可能是最简单的方法。

 #ifdef __SIZEOF_INT128__ // do some fancy stuff here #else // do some fallback stuff here #endif 

我还没有处理__uint128_t,但根据现有的模式用法,我希望如下。

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

希望这可以帮助

在/ usr / libexec / gcc树中找到你的cc1,然后查询它:

 $ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 |  grep uint128_t
 __uint128_t(或不)