La palabra clave externa en C se aplica a variables C (objetos de datos) y funciones C. Básicamente, la palabra clave extern amplía la visibilidad de las variables y funciones de C. Probablemente esa sea la razón por la que se le llamó externo.
Aunque la mayoría de las personas probablemente comprendan la diferencia entre la declaración y la definición de una variable o función, para completar, aclarémosla.
- La declaración de una variable o función simplemente declara que la variable o función existe en algún lugar del programa, pero no se asigna memoria para ellas. La declaración de una variable o función cumple un papel importante: le dice al programa cuál será su tipo. En el caso de función declaraciones, también le dice al programa los argumentos, sus tipos de datos, el orden de esos argumentos y el tipo de retorno de la función. Eso es todo acerca de la declaración.
- viniendo al definición , cuando nosotros definir una variable o función, además de todo lo que hace una declaración, también asigna memoria para esa variable o función. Por lo tanto, podemos pensar en la definición como un superconjunto de la declaración (o la declaración como un subconjunto de la definición).
- Extern es un nombre corto para externo.
- La variable externa se utiliza cuando un archivo en particular necesita acceder a una variable desde otro archivo.
Sintaxis de externo en C
La sintaxis para definir una variable externa en C es simplemente usar la palabra clave extern antes de la declaración de la variable.
extern data_type variable_name;>
Ejemplo de variable externa en C
C
#include> > extern> int> a;>// int var; ->declaración y definición> >// extern int var; ->declaración> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }> |
>
derivado parcial de látex
>
Propiedades de la variable externa en C
- Cuando escribimos extern algún_tipo_datos algún_nombre_variable; no se asigna memoria. Sólo se anuncia la propiedad de la variable.
- Se permiten múltiples declaraciones de variables externas dentro del archivo. Este no es el caso de las variables automáticas.
- La variable externa le dice al compilador Salga de mi alcance y encontrará la definición de la variable que declaré.
- El compilador cree que todo lo que dice esa variable externa es cierto y no produce ningún error. El vinculador arroja un error cuando descubre que no existe dicha variable.
- Cuando se inicializa una variable externa, se asigna memoria para ella y se considerará definida.
Una variable o función puede ser declarado cualquier número de veces, pero puede ser definido sólo una vez. (Recuerde el principio básico de que no puede tener dos ubicaciones de la misma variable o función).
Ahora volvamos a la palabra clave externa. Primero, consideremos el uso de extern en funciones. Resulta que cuando se declara o define una función, la palabra clave extern se asume implícitamente. Cuando escribimos.
int foo(int arg1, char arg2);>
El compilador lo trata como:
extern int foo(int arg1, char arg2);>
Dado que la palabra clave extern extiende la visibilidad de la función a todo el programa, la función se puede usar (llamar) en cualquier lugar de cualquiera de los archivos de todo el programa, siempre que esos archivos contengan una declaración de la función. (Con la declaración de la función en su lugar, el compilador sabe que la definición de la función existe en otro lugar y continúa y compila el archivo). Eso es todo sobre funciones externas y.
Ahora consideremos el uso de extern con variables. Para empezar, ¿cómo declarar una variable sin definiendo ¿él? Harías algo como esto:
extern int var;>
Aquí, se ha declarado una variable de tipo entero llamada var (aún no se ha definido, por lo que hasta ahora no se ha asignado memoria para var). Y podemos hacer esta declaración tantas veces como queramos.
Ahora, ¿cómo harías? definir var? Harías esto:
int var = 10;>
En esta línea, se ha declarado una variable de tipo entero llamada var y definido (recuerde que definición es el superconjunto de declaración ). Ya que esto es un definición , también se asigna la memoria para var. Ahora aquí viene la sorpresa. Cuando declaramos/definimos una función, vimos que la palabra clave extern estaba presente implícitamente. Pero este no es el caso de las variables. Si lo fuera, nunca se les asignaría memoria. Por lo tanto, debemos incluir explícitamente la palabra clave extern cuando queremos declarar variables sin definirlas. Además, como la palabra clave extern extiende la visibilidad a todo el programa, al usar la palabra clave extern con una variable, podemos usar la variable en cualquier parte del programa siempre que incluyamos su declaración de que la variable está definida en algún lugar.
Ahora intentemos entender lo externo con ejemplos.
Ejemplo 1:
C
int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Este programa se compila exitosamente. var se define (y se declara implícitamente) globalmente.
Ejemplo 2:
C
extern> int> var;> int> main(>void>)> {> >return> 0;> }> |
>
>
Este programa se compila exitosamente. Aquí solo se declara var. Tenga en cuenta que var nunca se utiliza, por lo que no surgen problemas.
marco tkinter
Ejemplo 3:
C
extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
Este programa arroja un error en la compilación (durante la fase de vinculación, más información aquí) porque var está declarado pero no definido en ninguna parte. Esencialmente, a la var no se le asigna ninguna memoria. Y el programa está intentando cambiar el valor a 10 de una variable que no existe en absoluto.
Ejemplo 4:
C
inttostr java
// As we are importing the file and henceforth the> // defination> #include 'somefile.h'> > // Declaring the same variable> extern> int> var;> >// int var;> >// It will throw compiler error as compiler will get> >// confused where the variable is defined> > int> main(>void>)> {> >var = 10;> >return> 0;> }> > // Now it will compile and run successfully> |
>
>
Producción:
10>
Nota: Aquí surge otro escenario: ¿qué pasa si no declaramos con extern en el fragmento de código anterior?
Considerando la suposición de que somefile.h contiene la definición de var, este programa se compilará correctamente. La palabra clave 'extern' se usa para una variable cuando declaramos la variable en un archivo y la definimos en otro archivo. Pero aquí, cuando importamos el mismo archivo en el archivo donde está declarado, se generará un error del compilador.
Esto se debe a que todavía tenemos que usar la palabra clave extern en el archivo donde hemos declarado esa variable para decirle a nuestro compilador que esta variable se ha definido en otro lugar y no se asignará nuevo espacio de memoria; de lo contrario, se creará otro bloque de memoria. cuyo uso de la palabra clave 'externa' es inútil.
Ejemplo 5:
C
extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }> |
>
>
¿Crees que este programa funcionará? Bueno, aquí viene otra sorpresa de los estándares C. Dicen que... si solo se declara una variable y también se proporciona un inicializador con esa declaración, entonces se asignará la memoria para esa variable; en otras palabras, esa variable se considerará como definida. Por lo tanto, según el estándar C, este programa se compilará exitosamente y funcionará.
Ésa fue una mirada preliminar a la palabra clave extern en C.
En resumen, podemos decir:
- Una declaración se puede realizar cualquier cantidad de veces, pero se puede definir solo una vez.
- la palabra clave extern se utiliza para ampliar la visibilidad de variables/funciones.
- Dado que las funciones son visibles en todo el programa de forma predeterminada, no es necesario el uso de extern en las declaraciones o definiciones de funciones. Su uso es implícito.
- Cuando extern se usa con una variable, solo se declara, no se define.
- Como excepción, cuando una variable externa se declara con inicialización, también se toma como definición de la variable.