Por qué no se necesita decorar un "Const Char *" con "Extern" al compartirlo, cruce múltiples archivos

StackOverflow https://stackoverflow.com//questions/24043974

  •  21-12-2019
  •  | 
  •  

Pregunta

Mientras lee los libros de C ++, aprendí que para compartir un Const Variable / Object Cross Multips Files, debemos definir la variable Const una vez en uno de los archivos, y declararlo en cada archivo de origen donde se usa.Por ejemplo,

en file1.cpp, definimos una variable CONT INT a nivel mundial como

extern const int ca = 100;

en file2.cpp donde lo usamos, declaramos esta variable como

extern const int ca;

La convención anterior tiene perfecto sentido para mí.Sin embargo, al llegar a un indicador Const Char, no necesitamos definirlo usando lo externo, y se puede compartir varios archivos de varios archivos.¿Por qué sucede tal cosa?Por ejemplo,

en File1.CPP, definimos una variable Const Char Pointer Globally como

const char *cstr = "hello";

en file2.cpp donde lo usamos, declaramos esta variable como

extern const char *cstr;

Para hacer mi pregunta más específica, ¿por qué CSTR se puede usar en File2.CPP a pesar de que no está decorado con "Extern" en File1.CPP?

Muchas gracias

¿Fue útil?

Solución

El problema es uno de enlace.Cuando definas una variable en alcance del espacio de nombres, y no hay declaración previa que establece enlace, el enlace externo si el objeto no es Const, interno si lo es.Así que cuando escribes:

int const ca = 100;

En un archivo de origen, el enlace será interno y la entidad (la variable) ca se refiere a será exclusivo de la traducción unidad.Si hubieras escrito:

int ca = 100;

El enlace sería externo, por lo que una

extern int ca;

en otra unidad de traducción se referiría a la misma variable.

y por supuesto, cuando escribes:

char const* cstr = "hello";

Usted está definiendo un puntero, que no es const (aunque puntos a const).

Por supuesto, normalmente, declararía las variables en un encabezado, con extern, por lo que habría una declaración anterior cuando Defina las variables, y es la primera declaración que Establece el vínculo.

Otros consejos

lo externo se usa para hacerlo explícito que la declaración "Extern Const Char * CSTR" "Es una declaración y no una definición, CSTR se define en otro lugar.Si hiciste "Const Char * CSTR"; "El compilador interpretaría eso como una definición y terminaría con 2 variables CSTR.

Si se aplica alternado en "Const Char * cstr=" hola ";"Supongo que el compilador lo ignora porque la inicialización significa que en realidad está definiendo la variable.

Más aquí: http://en.wikipedia.org/wiki/external_variable

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top