clang的uint24_t如何工作?我可以在clang/LLVM之外使用它吗?

ein*_*ica 6 c++ gcc clang

作为一名GCC用户,我刚刚注意到clang支持一种uint24_t类型(stdint.h无论如何都是这样).

这是如何运作的?我的意思是,它是纯粹在内部支持,作为语言扩展,还是像C++类一样实现,有一些抽象超过3个字节或16位值和另一个8位值?并且 - 如何可能"猛拉"这样的实现并自己使用GCC?

注意:

  • 我希望在现代C++(或uint_t<N>更普遍的)中有类似uint24_t的类; 我的选择是自己动手.
  • s/uint/int/g;如果你喜欢这个问题,你可以.

Cod*_*ray 4

这不是便携式的或标准的。它仅适用于 AVR(具有 24 位地址),GCC 也适用于该架构(自 GCC v4.7 起)。

如果架构不支持本机 24 位整数,则不会定义它。

如果您查看Clang 的stdint.h头文件__INT24_TYPE__,您会发现仅在定义内部符号时才会有条件地包含 24 位整数 typedef :

#ifdef __INT24_TYPE__
typedef __INT24_TYPE__ int24_t;
typedef __UINT24_TYPE__ uint24_t;
typedef int24_t int_least24_t;
typedef uint24_t uint_least24_t;
typedef int24_t int_fast24_t;
typedef uint24_t uint_fast24_t;
# define __int_least16_t int24_t
# define __uint_least16_t uint24_t
# define __int_least8_t int24_t
# define __uint_least8_t uint24_t
#endif /* __INT24_TYPE__ */
Run Code Online (Sandbox Code Playgroud)