Si hago referencia a una función llamada sqrt
, ¿cómo sabe el compilador qué archivo buscar, si no lo he especificado? Podría ser absolutamente cualquier archivo en mi disco duro completo.
A diferencia de Java, C++ realmente no considera ningún archivo "especial". Java tiene su biblioteca de clases gigante (hinchada), que se pone automáticamente a disposición del programador.
En C++, este concepto no existe. Le dice al compilador qué rutas buscar, y siempre que # incluya un archivo, buscará el nombre del archivo en esas rutas.
Si eso sucede para encontrar un archivo de biblioteca estándar, lo usará. Si encuentra un archivo de un tercero, lo usará.
El compilador no sabe sqrt
que se define en la cabecera math.h
. O que es también típicamente definido en cmath
De hecho, las funciones definidas por un encabezado pueden variar. Quizás, si defino # el símbolo del preprocesador apropiado, algunas funciones se eliminarán de un encabezado específico, y otras se habilitarán.
Pero a diferencia de Java, donde las funciones y clases definidas por una biblioteca se pueden determinar simplemente examinando los metadatos del archivo de biblioteca, en C++, el encabezado debe compilarse.Y el resultado de compilarlo puede variar según el contexto en el que está incluido.
Así que el compilador de C++ no puede adivinar qué encabezado se debe incluir para definir la función que acaba de utilizar.
¿Java funciona con archivos de encabezado? – Peter
Se llaman declaraciones de importación – bragboy
La 'importación' de Java es más parecida a 'usar' de C++, no como '# include'. – fredoverflow