/ / programa no compila con la versión más reciente de g ++ - c ++

El programa no se compila con la versión más reciente de g ++ - c ++

Tengo el siguiente código fuente. Que compila bien en estudios visuales y g ++ 3.4.6; pero no con g ++ 4.4.3 (en una máquina ubuntu más nueva). El compilador más reciente requiere que incluya explícitamente para usar atoi. Solo estoy tratando de averiguar qué podría haber cambiado para causar este comportamiento. Es un archivo de encabezado de secuencia de comandos incluido anteriormente cstdlib y ya no lo hace. O es el comportamiento del compilador que ha cambiado.

#include <sstream>

int main()
{
char str1[]="123";
int i = atoi(str1);

printf ("value = %d",i);
return 0;
}

Respuestas

10 por respuesta № 1

También es necesario incluir <cstdio> para printf().

Técnicamente, si se incluyen los encabezados de la forma. <cname> en lugar de <name.h>, también necesita calificar los nombres de la biblioteca estándar usando std::. Sin embargo, muchas implementaciones de bibliotecas estándar están relajadas cuando se trata de esto, y también ponen los nombres en el espacio de nombres global.

Es dependiente de la implementación que encabezados sonincluidos por los otros encabezados, por lo que siempre debe asegurarse de incluir todos los encabezados que necesite y no asumir que se incluirán automáticamente.


6 para la respuesta № 2

Estoy usando GCC 4.4.5 en Debian, y los encabezados han cambiado, por lo que no traerá los encabezados necesarios. #include <cstdlib> y #include <cstdio> Llegar atoi y printf, como el compilador se quejó de que ambos faltan.

#include <sstream>
#include <cstdio>
#include <cstdlib>


int main()
{
char str1[]="123";
int i = std::atoi(str1);

std::printf ("value = %d",i);
return 0;
}

2 para la respuesta № 3

Bueno, sí. Eso es comun Siempre debe incluir TODOS los encabezados que está usando directamente y no depender del hecho de que esos encabezados ya estén incluidos.


1 para la respuesta № 4

El comportamiento del compilador es lo que habría cambiado ... <sstream> no usa atoi.

Probablemente deberías haberlo hecho siempre. #include <cstdlib>, y has tenido suerte con tus compiladores anteriores.

Como James McNeillis señala, usted también debería #include <cstdio> para usar el printf función.