Estoy leyendo "Think in C ++" y acaba de presentar la extern
declaración. Por ejemplo:
extern int x;
extern float y;
Creo que entiendo el significado (declaración sin definición), pero me pregunto cuándo será útil.
¿Alguien puede dar un ejemplo?
c++
variable-declaration
Aslan986
fuente
fuente
extern
en varias ocasiones. Las herramientas de Microsoft produjeron un error de enlace para los símbolos faltantes cuando solo se definieron las tablas en otro archivo fuente. El problema era que la tabla eraconst
y el compilador de C ++ lo promovióstatic
en la unidad de traducción. Ver, por ejemplo,ariatab.cpp
ykalynatab.cpp
.Respuestas:
Esto resulta útil cuando tiene variables globales. Usted declara la existencia de variables globales en un encabezado, de modo que cada archivo fuente que incluye el encabezado lo sepa, pero solo necesita "definirlo" una vez en uno de sus archivos fuente.
Para aclarar, usar
extern int x;
le dice al compilador que un objeto de tipoint
llamadox
existe en alguna parte . No es el trabajo de los compiladores saber dónde existe, solo necesita saber el tipo y el nombre para saber cómo usarlo. Una vez que se hayan compilado todos los archivos de origen, el vinculador resolverá todas las referenciasx
a la definición que encuentra en uno de los archivos de origen compilados. Para que funcione, la definición de lax
variable debe tener lo que se llama "enlace externo", lo que básicamente significa que debe declararse fuera de una función (en lo que generalmente se llama "el alcance del archivo") y sin lastatic
palabra clave.encabezamiento:
fuente 1:
fuente 2:
fuente
Es útil cuando comparte una variable entre unos pocos módulos. Lo define en un módulo y usa extern en los otros.
Por ejemplo:
en file1.cpp:
en file2.cpp:
fuente
global_int
está en el espacio de nombres global, si tuviera que usarlo en file2.cpp en alguna sección de espacio de nombres tendría que determinarlo correctamente? es decirnamespace XYZ{ void foo(){ ::global_int++ } };
abc.h
, hay una buena probabilidad de que se defina enabc.cpp
. Un buen IDE siempre ayudará, pero un código bien organizado siempre es una mejor solución.extern
en file2.cpp, aún puede acceder aglobal_int
after include. ¿Por qué necesito tenerlo?Se trata de la vinculación .
Las respuestas anteriores proporcionaron buenas explicaciones sobre
extern
.Pero quiero agregar un punto importante.
Pregunta
extern
en C ++ no en C y no sé por qué no hay una respuesta que mencione sobre el caso cuandoextern
viene conconst
C ++.En C ++, una
const
variable tiene un enlace interno por defecto (no como C).Entonces este escenario conducirá a un error de enlace :
Fuente 1:
Fuente 2:
Tiene que ser así:
Fuente 1:
Fuente 2:
fuente
extern
definición? Puede hacerlo imprimiendo el valor deglobal
en la fuente 2.extern
se omite enconst int global = 255;
.Esto es útil cuando desea tener una variable global. Usted define las variables globales en algún archivo fuente y las declara externas en un archivo de encabezado para que cualquier archivo que incluya ese archivo de encabezado vea la misma variable global.
fuente