我有一个使用itoa()的c ++程序。我在64Bit编译器(TDM-GCC-5.1)上编译它,它编译并工作。但是当我使用32位TDM-GCC-5.1编译器编译它时,我得到错误itoa()未在此范围内声明。我尝试在两台不同的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
答案 0 :(得分:3)
itoa
不是标准函数。它由一些实现提供,而不是由其他实现提供。在便携式软件中避免使用它。
64位版本的TDM GCC在其默认模式下恰好提供itoa,而32位版本则不提供itoa。为了保持版本之间的行为一致,请尝试例如-std=c++11 -DNO_OLDNAMES -D_NO_OLDNAMES
。
符合标准的替代方案将是例如
char buffer[20];
snprintf (buffer, sizeof(buffer), "%d", number);
说到可移植性,没有main()
的{{1}}是一个严重的错误,在某些版本的GCC for Windows中错误地没有诊断。这是GCC版本中的一个错误。此外,访问未初始化的变量int
会触发未定义的行为。