Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC中是否有_int32的对应项?_C_Visual C++_Gcc_Types_Compiler Construction - Fatal编程技术网

GCC中是否有_int32的对应项?

GCC中是否有_int32的对应项?,c,visual-c++,gcc,types,compiler-construction,C,Visual C++,Gcc,Types,Compiler Construction,我正在编写一个供自己使用的跨平台库。该库可以在linux内核、NT内核和许多其他环境中使用,因此我不想依赖任何头或库,即使它们是标准头。因此,我不能包含stdint.h来使用int32\t 如果我使用VC++,我可以键入def u int32 MY_int32;,因为_uint32是在编译器中构建的 GCC中是否有_int32的对应项 我目前的做法是: typedef signed char KTL_INT8; typedef signed short KTL_INT1

我正在编写一个供自己使用的跨平台库。该库可以在linux内核、NT内核和许多其他环境中使用,因此我不想依赖任何头或库,即使它们是标准头。因此,我不能包含stdint.h来使用int32\t

如果我使用VC++,我可以键入def u int32 MY_int32;,因为_uint32是在编译器中构建的

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");
我不这么认为,不


我查看了,但没有找到任何其他内容。

这可能因GCC版本而异,但在最近几次检查中,您会发现

#include <stdint-gcc.h>
这是一个生成的文件,您可以在/usr/lib/gcc///include/中找到,其中主机和版本特定于您的gcc。它似乎使用形式为uu INT32_TYPE_uuu的宏来表示类型本身


我怀疑这些被定义为从机器描述文件映射到GCC内部类型系统的属性,但我已经很久没有使用GCC源代码了。

为什么不能使用?这是编译器为您提供对已知大小类型的访问的方式。你可以写你自己的模拟它包括?内核可能没有提供,因为即使在独立的环境中,它也必须由语言编译器提供。参见ISO/IEC 9899:1999,§4一致性:一致性独立实施应接受任何严格一致的程序,该程序不使用复杂类型,且在该程序中,库条款第7条中规定的功能的使用仅限于标准标题、、和的内容。不管怎样,内核模块都应该能够使用这7个头。类似的@xmllmx,您应该提供有关您实际试图解决的问题的信息,而不是在注释中进行理论化。您正在构建Linux内核模块吗?在这种情况下,可能会有一个特定的解决方案。如果没有,你在做什么,人们可以帮助你?在这种情况下,你有所有的乐趣重新发明车轮。请确保角落有点圆;它使骑行更加平稳。忽略编译器通过忽略这些核心头告诉您的关于它自己的信息可能不是最好的方法。