从int类型转换为int32类型

4

我在我的c++代码中有许多int类型的变量,现在需要将它们改为int32类型。bool类型也是同样的情况。我需要包含哪个头文件才能使用int32和bool32?另外,一旦我创建了这些类型,如何声明它们?我能否直接将int替换为int32?

例如:

int x;

变成

int32 x;

我试图将int改为int32时,出现了很多错误。以下是其中的一些: 错误 C4430:缺少类型说明符 - 假定为int。注意:C++不支持默认int 错误 C2086:'const int x':重定义

1
那么它是C、C++还是C++/CLI?选一个,你不需要同时编程三个。 - GManNickG
1
@Graham:那为什么标记为C和C++? - GManNickG
1
在Windows上,“int”是32位的,无论CPU数据或地址宽度如何。如果您的代码无论如何都依赖于Windows,请继续使用“int”。它永远不会改变。而且我不确定为什么您认为“int”变得更大会破坏您的程序。如果确实如此,那么您的程序已经存在重大错误。 - R.. GitHub STOP HELPING ICE
@Graham:如果这是C++/CLI,那么您可能指的是.Net结构类型System.Int32System.Boolean,没有Bool32,而Int32的I是大写。但是,这两种类型在C++/CLI中不受直接支持,它们是底层CLI类型,映射到标准C++内置的int和bool。无论如何,如果问题是特定于C++/CLI的,则不应将其标记为C++,并且绝对不应将其标记为C。 - Clifford
哪个编译器可以使用int32?我从未见过这样的。我见过int、int32_t和__int32_t,但从未见过int32。 - user2918461
显示剩余2条评论
3个回答

10
<cstdint>
如果你的编译器支持,可以使用int32_t,这是C99中的定宽整数类型。
从未听说过bool32,我甚至无法想象它会有什么意义。
是的,你可以将int替换为你的类型,只要你的类型仍然是基本类型和/或具有默认构造函数/非隐式构造函数...具体取决于用途。

由于ISO C++98标准先于ISO C99,支持<stdint.h>的编译器可能没有相应的<cstdint> C++头文件(它不是C++98中的C++标准头文件),因此可能需要使用<stdint.h>。如果使用VC++,它根本不提供该头文件,但您可以使用此链接:http://msinttypes.googlecode.com/svn/trunk/stdint.h - Clifford
1
@Clifford:你一定在使用旧版本的VC++,因为VC++ 2010肯定提供了<stdint.h>头文件。 - Blastfurnace
@Balstfurnace:知道这一点很好,但这个事实尚未被记录!:http://msdn.microsoft.com/en-us/library/a7tkse1h.aspx,而且显然,stdint.h和cstdint都没有在包括2008在内的任何版本中提供。 - Clifford

1

使用typedef来代替实际的数据类型可能会更好。

例如:

typedef int my_int;
....
my_int var;

变成:

typedef int32 my_int;
....
my_int var;

那样的话,你只需要更改一行代码就可以将所有的int实例更改为int32。

但如果我理解问题正确的话,那已经太晚了。他已经在代码中使用了“int”。 - rubenvb
他可以轻松地通过查找/替换“ int ”为“ my_int”,然后添加typedef来完成此操作。 - David Weiser

1

在Windows上,您应该能够使用内置类型__int32。我从未听说过32位bool,但您可以使用typedef来定义它。


我理解这一点,但当它在64位环境中构建时,int变成了64位。无论环境如何,我需要它是32位的。Dan写的就是解决方案。 - Graham
2
@Graham - 这并不影响,int 在 x64 模式下仍然是32位。 - Hans Passant
我认为你是正确的,但标准只规定了表示int的最小值,即使它现在在所有ms windows系统上,也不意味着它保证会一直保持这样。为了编写可移植的可持续代码,在需要特定大小时,您确实应该使用提供的类型,即使仅仅是为了明显地表明如果更改大小,代码将会中断。FYI,boost还提供了可移植类型,应该适用于所有平台http://www.boost.org/doc/libs/1_37_0/boost/cstdint.hpp。 - Dan
在Windows、Linux和Mac OS X上,int在x64上是32位的。然而,在Windows上,wchar_t是32位的,在Linux/x64和Mac/x64上则为64位。当然,如果可移植性很重要,通常不能做出这样的假设。例如,在宽字符串中,每个字符都是2个字节长的这样的假设是非常严重的错误。 - Tamas Demjen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接