13

我们可以使用预处理器来知道是否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

4 回答 4

16

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

#ifdef __SIZEOF_INT128__
    // do some fancy stuff here
#else
    // do some fallback stuff here
#endif
于 2014-06-01T14:42:24.123 回答
4

我还没有处理 __uint128_t,但是基于现有的模式使用,我期望以下。

#include <stdint.h>

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

希望这可以帮助

于 2013-08-30T12:14:45.340 回答
3

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

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

于 2013-08-30T11:32:09.340 回答
3

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

$ 字符串 /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t
__uint128_t(或不)
于 2016-05-09T02:04:24.543 回答