0 c++
我有以下源代码.这在视觉工作室和g ++ 3.4.6中编译得很好; 但不是用g ++ 4.4.3(在较新的ubuntu机器上).较新的编译器要求我明确包含使用atoi.我只想弄清楚可能导致此行为的原因.是先前包含cstdlib的sstream头文件,不再这样做了.或者是已更改的编译器行为.
#include <sstream>
int main()
{
char str1[]="123";
int i = atoi(str1);
printf ("value = %d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 10
您还需要包括<cstdio>的printf().
从技术上讲,如果您包含表单的标题<cname>而不是<name.h>,则还需要使用标准库中的名称限定std::.尽管如此,很多标准库实现都是放宽的,并且还将名称放入全局命名空间.
它依赖于实现,哪些标头包含在哪个标头中,因此您应该始终确保包含所需的所有标头,而不是假设它们将自动包含在内.
我在Debian上使用GCC 4.4.5,并且标题已更改,因此您不会引入必要的标头.你需要#include <cstdlib>并且#include <cstdio>得到atoi并且printf,因为编译器抱怨两者都丢失了.
#include <sstream>
#include <cstdio>
#include <cstdlib>
int main()
{
char str1[]="123";
int i = std::atoi(str1);
std::printf ("value = %d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)