elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:49  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  conflictos de nombres de variables
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: conflictos de nombres de variables  (Leído 885 veces)
jacy11

Desconectado Desconectado

Mensajes: 4


Ver Perfil
conflictos de nombres de variables
« en: 26 Noviembre 2011, 02:48 »

Hola, soy nuevo en la comunidad, espero me puedan ayudar. Ahora ando aprendiendo a programar en C, pero me tope con este problema, ando siguiendo un libro "Piensa en C de Osvaldo Cairó" , ando en tema de funciones. Lo que pasa es que ahi se utiliza como un operador para hacer referencia a las variables globales dentro de una función teniendo ambás el mismo nombre. este es el ejemplo

Código:
#include <stdio.h>
/* Conflicto de variables con el mismo nombre */
void f1(void);  /* Prototipo de función. */
int K = 5;      /* Variable global. */

int main(void) {
    int I;
    for(I = 1 ; I <= 3; I++)
          f1();
}

void f1(void) {
/* La función utiliza tanto la variable local I como la variable global I. */
   int K = 2;
   K += K;
   printf("\n\nEl valor de la variable local es: %d", K);
   ::K = ::K + K; /* Uso de ambas variables. */
   printf("\nEl valor de la variable global es: %d", ::K);
}
y me mada este error al compilar
Citar
C:\Users\martin\Desktop\programasC\p4_3.c In function `f1':
17 C:\Users\martin\Desktop\programasC\p4_3.c syntax error before ':' token
18 C:\Users\martin\Desktop\programasC\p4_3.c syntax error before ':' token

Estuvé buscando si era algún otro carácter ya que al parecer hay diferencias entre un compilador y otro, pero no encontre nada. Así que es por eso recurro a uds. ¿Cómo se puede hacer referencia a la veriable global K desde la función f1? correctamente o ¿simplemente no se puede?. Por cierto utilizo dev C++ desde windows.

Espero su ayuda!
gracias.


En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: conflictos de nombres de variables
« Respuesta #1 en: 26 Noviembre 2011, 03:04 »

Las variables locales de un proceso TIENEN MAYOR presedencia que las externas...

En pocas palabras si las variables tan locales de un proceso/funcion tienen el mismo nombre que una fuera de ella, la variable externa (por no decirle global) del proceso/funcion sera ignorada, la unica manera de hacer referencia a las variables externas es con "::" en si el codigo que has publicado aquí esta CORRECTO.

por otro lado el codigo me corrio correctamente en CodeBlocks con el compilador predeterminado (para windows)

* dev C++ esta DESCONTINUADO...

Dulces Lunas!¡.


« Última modificación: 26 Noviembre 2011, 03:09 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
RyogiShiki


Desconectado Desconectado

Mensajes: 709


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: conflictos de nombres de variables
« Respuesta #2 en: 26 Noviembre 2011, 03:09 »

Lo que pasa es que ha de estar compilando con compilador exclusivo de C o que hace referencia a C, los dos puntos '::' solo está permitido en C++, SIn mencionar que todo el código es puro C, al menos eso es lo que tengo entendido. No se si C99 lo permita. Que alguien me corrija si estoy mal
--EDIT--
Y parece que no estoy mal, si compilo el código con gcc (Solo c) me da el error, pero si Compilo con g++ (C++) no se queja.

Si es DevCpp aunque es recomendable ya no usarlo, imagino que con renombrar el archivo y ponerle extensión .cpp funcionará
Saludos
« Última modificación: 26 Noviembre 2011, 03:28 por RyogiShiki » En línea

jacy11

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: conflictos de nombres de variables
« Respuesta #3 en: 26 Noviembre 2011, 03:48 »

si efectivamente estoy compilando con gcc. Ya que mi codigo fuente queda con extensión fuente.c, probe compilando con g++ y con este si funciona. Entonces esto me confunde, pa mi que como decia programación en C los programas que trae el libro funcionarías en el compilador de C no de C++, no entiendo como esta la cosa???.  :-\ esto confirma lo que dice RyogiShiki. que me aconsejan usar en lugar de DevC++??
En línea
RyogiShiki


Desconectado Desconectado

Mensajes: 709


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: conflictos de nombres de variables
« Respuesta #4 en: 26 Noviembre 2011, 03:55 »

CodeBlocks o Geany.

Pues la cosa es que C++ es un superconjunto de C, por lo tanto es como tener C dentro de C++, y los compiladores de C++ todos dan soporte a C, lo que permite ese uso de expresiones en C puro, pero no es para nada recomendable y va en contra del standard. No puedo creer ni siquiera que el libro tenga eso

Saludos
« Última modificación: 26 Noviembre 2011, 03:58 por RyogiShiki » En línea

do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


Ver Perfil
Re: conflictos de nombres de variables
« Respuesta #5 en: 26 Noviembre 2011, 11:04 »

¡Buenas!

Esta solucion puede ser un tanto complicada, pero ahi va, intenta cambiar el nombre de alguna de las dos variables.

¡Saludos!

PD: Y si, en C++ las variables locales hacen sombra a las variables de bloques exteriores que tengan el mismo identificador. Podras acceder a las exteriores con el operador ::, pero en C no esta permitido que dos variables en un mismo ambito tengan el mismo identificador.

¡Saludos!
« Última modificación: 26 Noviembre 2011, 11:07 por do-while » En línea

¡¡¡Feliz año nuevo!!!
jacy11

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: conflictos de nombres de variables
« Respuesta #6 en: 27 Noviembre 2011, 03:42 »

¡Buenas!

Esta solucion puede ser un tanto complicada, pero ahi va, intenta cambiar el nombre de alguna de las dos variables.

¡Saludos!

PD: Y si, en C++ las variables locales hacen sombra a las variables de bloques exteriores que tengan el mismo identificador. Podras acceder a las exteriores con el operador ::, pero en C no esta permitido que dos variables en un mismo ambito tengan el mismo identificador.

¡Saludos!

Pero el objetivo del ejemplo es de que declarando una variable con un nombre como global, y dentro de una función declare otra con el mismo nombre tenga la posibilidad de acceder a la global, por que como dices esta es ocultada, para solo poder acceder a la local. Claro que si la cambio no habría problema. Mi duda era por que no me funciona :: para acceder a la global, pero como dijeron antes, esto solo lo soporta C++.
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: conflictos de nombres de variables
« Respuesta #7 en: 27 Noviembre 2011, 12:03 »

Compilalo con g++ y no con gcc y deberia funcionarte, el operador de resolucion de ambito es de C++: http://en.wikipedia.org/wiki/Scope_resolution_operator#C.2B.2B
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
jacy11

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: conflictos de nombres de variables
« Respuesta #8 en: 27 Noviembre 2011, 19:46 »

ok gracias, ya entedí, efectivamente compiladon con g++ si compila. Solo que el libro no especifica que compilador utiliza, pero como habla sobre programación en C, pues supuse que emplea unicamente el compilador de C, gcc.

Grcias por la ayuda  ;D
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conflictos de hardware
GNU/Linux
elbrocheta 0 252 Último mensaje 31 Marzo 2005, 02:53
por elbrocheta
conflictos con synaptic
GNU/Linux
bita 2 458 Último mensaje 16 Octubre 2005, 14:53
por Firos
Conflictos en el sistema
Windows
Arkanian 0 461 Último mensaje 19 Mayo 2007, 12:38
por Arkanian
conflictos con el usb
Hardware
tordoman 4 524 Último mensaje 12 Mayo 2008, 11:11
por tordoman
[Batch] almacenar nombres de carpetas en variables (solucionado)
Scripting
corax 6 3,232 Último mensaje 19 Junio 2009, 12:20
por corax
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines