C/Visual C - alcance de variables

   
Vista:

alcance de variables

Publicado por Diego (86 intervenciones) el 05/06/2016 22:36:02
Buenas tardes, tengo algunas dudas acerca del alcance de variables.
ejercicio:
Analice el siguiente código y saque sus propias conclusiones.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
int var_1 = 3;
void alter_var_1_A()
{
	int var_1;
	var_1++;
}
void alter_var_1_B()
{
	extern int var_1;
	var_1++;
}
void alter_var_1_C()
{
	var_1++;
}
int main(){
	printf("El valor inicial de var_1 es: %d\n", var_1);  //3
	alter_var_1_A();
	printf("El valor luego de alter_var_1_A es: %d\n", var_1);  //3
	alter_var_1_B();
	printf("El valor luego de alter_var_1_B es: %d\n", var_1);  //4
	alter_var_1_C();
	printf("El valor luego de alter_var_1_C es: %d\n", var_1);  //5
	return 0;
}

acerté con el resultado de las funciones, pero me quedaron dudas en la funcion alter_var_1_A, y alter_var_1_B

alter_var_1_A: gcc me da un warning por intentar hacer un incremento sin haber iniciado la variable var_1. ¿se incremento el contenido basura la variable local var_1?

alter_var_1_B: Al no haber archivos externos(cabeceras), ¿Como es que se comporta extern?. ¿Busca la variable dentro del archivo origen?.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

alcance de variables

Publicado por Chema (187 intervenciones) el 05/06/2016 23:37:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Veo que te hizo gracia la definicion extern que incluí en el ejemplo anterior.
También aprecio que te gusta el "sado malo" y te fabricas tus propios  "ejemplos/castigos".
 
 
Tu ejemplo es muy malo, ¿Quieres "sado del bueno"?, jejeje, aquí tienes un pequeño ejemplo.
No te tortures si no  entiendes el ejemplo, si te gusta C y aprendes ,con el tiempo lo entenderás.
 
 
 
/**********************************/
c.h
 
#ifndef C_H
#define C_H
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
#endif   /* C_H */
 
/**********************************/
data.h
 
#ifndef DATA_H
#define DATA_H
 
extern void InitGlobal(void);
 
#endif   /* DATA_H */
/**********************************/
global.h
 
#ifndef GLOBAL_H
#define GLOBAL_H
 
extern int a;
extern int b;
extern int c;
extern int d;
extern int e;
 
#endif   /* GLOBAL_H */
 
/**********************************/
data.c
 
#include "c.h"
 
 int a;
 int b;
 int c;
 int d;
 int e;
 
 void InitGlobal(void) {
	a = 1;
	b = 2;
	c = 3;
	d = 4;
	e = 5;
 }
/**********************************/
main.c
 
#include "c.h"
#include "global.h"
#include "data.h"
 
int main(void) {
	InitGlobal();
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);
	printf("%d\n", d);
	printf("%d\n", e);
	return 0;
}
/**********************************/
colocar todos los ficheros en el mismo directorio y ejecutar
 
gcc  -Wextra -Wall -pedantic -o main main.c data.c -I./
 
-Wextra -Wall -pedantic, te garantiza que poco truco y tonterías puede haber.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

alcance de variables

Publicado por Diego (86 intervenciones) el 06/06/2016 04:01:14
Gracias, ahora me pongo a analizar bien el codigo que diste; En cuanto a los ejemplos, son ejemplos/ejercicios que se nos dió en la practica del seminario de C hace 2 años. Supongo que son hechos a propósito para que los alumnos consulten casi necesariamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

alcance de variables

Publicado por Tom (481 intervenciones) el 06/06/2016 09:55:47
alter_var_1_A: las declaraciones locales tienen precedencia sobre las globales.

alter_var_1_B: 'extern' no tiene nada que ver con ficheros de cabecera. Con extern declaras una variable que estará definida en otro ámbito. Su dirección de memoria se resolverá probablemente al generar el ejecutable. En tu caso, claramente apuntará a la variable global.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar