我正在编写一个供我自己使用的跨平台库。该库可以在linux内核,NT内核和许多其他环境中使用,因此我不想依赖任何头文件或库,即使它们是标准头文件。因此,我无法使用stdint.h
来使用int32_t
。
如果我使用VC ++,我可以typedef __int32 MY_INT32;
,因为__int32
是在编译器中构建的。
GCC中是否有__int32
的对应物?
我目前的做法是:
typedef signed char KTL_INT8;
typedef signed short KTL_INT16;
typedef signed int KTL_INT32;
typedef signed long long KTL_INT64;
typedef unsigned char KTL_UINT8;
typedef unsigned short KTL_UINT16;
typedef unsigned int KTL_UINT32;
typedef unsigned long long KTL_UINT64;
static_assert(1 == sizeof(KTL_INT8), "sizeof(KTL_INT8) != 1");
static_assert(2 == sizeof(KTL_INT16), "sizeof(KTL_INT16) != 2");
static_assert(4 == sizeof(KTL_INT32), "sizeof(KTL_INT32) != 4");
static_assert(8 == sizeof(KTL_INT64), "sizeof(KTL_INT64) != 8");
答案 0 :(得分:0)
我不这么认为,不。
我查看GCC's extensions documentation但除了__int128
之外没有找到任何其他内容。
答案 1 :(得分:0)
这可能会因GCC版本而异,但在最近的几个版本中我已经检查过你了
#include <stdint-gcc.h>
这是您在/usr/lib/gcc/<target>/<version>/include/
中找到的生成文件(其中主机和版本将特定于您的GCC。它似乎使用__INT32_TYPE__
形式的宏来表示类型本身。< / p>
(我怀疑这些被定义为从机器描述文件映射到GCC内部类型系统的属性,但是自从我使用GCC源代码以来已经太长了。)