Estoy leyendo "Think in C ++" y acaba de presentar la externdeclaració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

externen 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 eraconsty el compilador de C ++ lo promovióstaticen la unidad de traducción. Ver, por ejemplo,ariatab.cppykalynatab.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 tipointllamadoxexiste 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 referenciasxa la definición que encuentra en uno de los archivos de origen compilados. Para que funcione, la definición de laxvariable 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 lastaticpalabra 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_intestá 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.externen file2.cpp, aún puede acceder aglobal_intafter 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
externen C ++ no en C y no sé por qué no hay una respuesta que mencione sobre el caso cuandoexternviene conconstC ++.En C ++, una
constvariable 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
externdefinición? Puede hacerlo imprimiendo el valor deglobalen la fuente 2.externse 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