即使包含stdlib.h,itoa()也无法在32位tdm-gcc 5.1上运行

时间:2017-10-30 09:16:05

标签: c++ char 32bit-64bit itoa

我有一个使用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

1 个答案:

答案 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会触发未定义的行为。