-2

我制作了一个使用 itoa () 的 c++ 程序。我在 64 位编译器(TDM-GCC-5.1)上编译它,它编译并工作。但是当我使用 32 位 TDM-GCC-5.1 编译器编译它时,我得到错误 itoa () is not declared in this scope。我尝试在两台不同的 32 位机器上编译它,但我得到了同样的错误,并且通过包含 cstdlib 和 stdlib.h 在这两种情况下仍然是同样的错误。它在 64 位机器上编译并运行良好。但是为什么它不在 32 位编译器上这样做呢?

你能推荐一些32位的替代品吗?

代码:

#include <iostream>
#include <stdlib.h>
using namespace std;

main()
{
int test;
char t[2];

itoa(test,t,10);
}

编译器输出:

C:\Users\hello\Desktop\Untitled1df.cpp  In function 'int main()':
C:\Users\hello\Desktop\Untitled1df.cpp  [Error] 'itoa' was not declared in this scope

截图:IDE 截图

4

1 回答 1

3

itoa不是标准功能。它由某些实现提供,而不是由其他实现提供。在便携式软件中避免使用它。

64 位版本的 TDM GCC 在其默认模式下恰好提供 itoa,而 32 位版本则没有。为了保持版本之间的行为一致,请尝试例如-std=c++11 -DNO_OLDNAMES -D_NO_OLDNAMES.

例如,符合标准的替代方案是

char buffer[20];
snprintf (buffer, sizeof(buffer), "%d", number);

说到可移植性,main()withoutint是一个严重错误,在某些版本的 GCC for Windows 中错误地留下了没有诊断信息。这是这些版本的 GCC 中的一个错误。此外,访问未初始化的变量test会触发未定义的行为。

于 2017-10-30T14:13:47.033 回答