itoa () 不适用于 32 位 tdm-gcc 5.1,即使包含 stdlib.h

itoa () does not work on 32bit tdm-gcc 5.1 even on including stdlib.h

我制作了一个使用itoa()的c++程序。我在 64 位编译器 (TDM-GCC-5.1) 上编译它,它编译并运行。但是当我使用 32 位 TDM-GCC-5.1 编译器编译它时,我得到错误 itoa () was 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

截图:the IDE screenshot

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

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

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

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

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