elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda acerca de macros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda acerca de macros  (Leído 3,081 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Duda acerca de macros
« en: 26 Octubre 2015, 11:25 am »

Hola, tengo un archivo de cabecera donde defino numerosas macros para el proyecto, a partir de la directiva de preprocesador #define.

Pero para definir strings no puedo usar la directiva, por ello creo que es mejor usar "extern const string variable_global", pero en un archivo de cabecera no puedo inicializarla.

Entonces surge el problema.

Si la inicializo en otro archivo sea cual sea, quedará inicializada con ese  valor para todos los demás ¿no?.

Si en el main inicializo todas, o a partir de otra función, esa variable queda definida ya para todos los .cpp ¿no?

Saludos y gracias.

Edito: O poner en el archivo header las variables como:

Código
  1. extern const string str1;
  2. extern const string str2;

Y en el .cpp poner:

Código
  1. extern const string str1 = "idudifu";
  2. extern const string str2="difaodhfio";

Al compilar el proyecto y añadir el header en todos los .cpp estos podrán usar las macros ya inicializadas no?

Edito: O bueno siempre se puede usar la opción sencilla y mala, de declararlas directamente en el header como string o lo que sean e incluir el header para cada .cpp que lo necesite, en ese caso se compilarán para cada .cpp varias veces (supongo que #define hará lo mismo), pero sería mucho más sencillo.

He probado a declarar el extern y me ha dado 300 fallos not the way.


« Última modificación: 26 Octubre 2015, 12:17 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #1 en: 26 Octubre 2015, 12:41 pm »

No entendí muy bien
No se que problema se te da. en un archivo de cabecera puedes declarar y definir un valor concreto para una variable global sin problemas... por ejemplo 'const string str1 = "idudifu";' y listo... En este caso esto no es una macro sino simplemente una variable global.

Pasa el código si puedes así aclaramos las dudas.

Saludos.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #2 en: 26 Octubre 2015, 17:30 pm »

En un archivo de cabecera no se deben implementar clases ni inicializar variables, solo se pueden declarar, es lo más correcto.

Partiendo de ahí, quería poner unas variables globales para todo el proyecto, las declaro en un archivo macro.h, luego voy a macro.cpp y las inicializo.

Luego si añado macro.h al main, ¿tendré el valor con las que las inicialice en macro.cpp?, esa es la pregunta.

De todas formas, me he dado cuenta de que lo estaba haciendo mal, porque había usado un archivo .h lleno de #define con cosas de configuración, lo correcto sería dividirlo para cada .h, tengo que cambiarlo.

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #3 en: 26 Octubre 2015, 21:54 pm »

Luego si añado macro.h al main, ¿tendré el valor con las que las inicialice en macro.cpp?, esa es la pregunta.

Piénsalo:
-7 horas desde el inicio del post
-3 archivos y apenas 10 líneas para comprobarlo

http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c

El ejemplo que ponen en el último link lo dice todo. Colocando extern en la cabecera, logras que, definiendo la avriable en 1 archivo, se pueda acceder a esa misma variable desde otros archivos.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #4 en: 27 Octubre 2015, 11:50 am »

La verdad he estado un poco ocupado entre horas, pero lo que he acabado haciendo ha sido distribuir las macros entre los distintos headers para que así no haya macros en códigos que no se vayan a utilizar, lo malo que para cambiarlas tengo que ir de cabecera en cabecera.

Me he dado cuenta que extern no vale para nada:

extern int casa = 5;

Pues es lo mismo que decir

int casa = 5;

Y declararla como global en una cabecera, para usarla debes incluir su cabecera en el código, luego es lo mismo, que no poner extern, luego es useless.

Entonces las variables globales que si use en varios archivos tengo 2 opciones o copiarlas para cada header, o crear un header y añadir el header a los headers.

Ahora que lo pienso seguramente usando las directivas de preprocesador quizás podamos hacer que se añadan las que queramos dependiendo del header a las que las estemos añadiendo, es decir crear un header con variables globales compartidas:

header_global.h

Código
  1. #ifdef CASAS
  2. #define  casa;
  3. int const casita;
  4. #else
  5. ...

Y en los headers que añadiría header_global.h, pondría #define CASAS  si quiero añadir casa y casita, y no poner nada si quiero añadir las demás por poner un ejemplo, aunque no se si valdrá para declarar variables globales en plan "const int casa", o solo macros con #define, que seguramente sea solo lo segundo, pero es algo que mejora la calidad del código en mi opinión hacerlo así.

Gracias y un saludo.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #5 en: 27 Octubre 2015, 16:56 pm »

Me he dado cuenta que extern no vale para nada:

En absoluto. Para que solo has visto 1 cara de la moneda.
Extern sirve para coger variables de otros archivos, sí. Pero sin necesidad de ninguna interaccion entre ellos. Extern coge una variable de un código objeto, NO necesita el código fuente. Esa, es una de las funcionalidades de extern:


Código
  1. //a.cpp
  2. int a = 5;

Código
  1. //b.cpp
  2. #include <iostream>
  3.  
  4. extern int a;
  5.  
  6. int main(){
  7. std::cout << a;
  8. }

Compilas ambos a un fichero objetos, y verás que no da problema al linkear. La salida, es la esperada, "5".
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #6 en: 27 Octubre 2015, 17:12 pm »

Ya veo, aunque hay que incluit los código fuente o cabeceras en el código fuente que queramos usar la variable, luego es lo mismo que si declaramos una variable en un header y vamos incluyendo el header en códigos, tendremos acceso a ella, sino me equivoco que no estoy seguro pues siempre suelo usar #define.

Aunque no me acaba de convencer esto del extern, mejor considero usar variables globales, y diferenciar variables a definir para cada cabecera como puse anteriormente, porque eso de tener una variable, declararla en un lado inicializarla en otro, luego en otro que ya no sabes ni lo que vale etc XD, mejor variables globales XD.

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #7 en: 27 Octubre 2015, 17:59 pm »

Ya veo, aunque hay que incluit los código fuente o cabeceras en el código fuente que queramos usar la variable
No, no hay que incluir nada. Es la utilidad de extern.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #8 en: 27 Octubre 2015, 18:27 pm »

No, no hay que incluir nada. Es la utilidad de extern.

Ah vale, es que pense que como ponías lo del "a.cpp" y "b.cpp", pensé que lo necesitaban ok.

Saludos y gracias XP
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda acerca de macros
« Respuesta #9 en: 27 Octubre 2015, 19:38 pm »

Código:
g++ -c a.cpp -o a.o
g++ -c b.cpp -o b.o
g++ a.o b.o -o b.exe
En caso de GCC.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una duda acerca de los Boletines
Sugerencias y dudas sobre el Foro
Z0mbie 9 4,820 Último mensaje 28 Enero 2004, 16:10 pm
por BADBYTE-K
Duda acerca de DLL
Programación Visual Basic
Krnl64 1 1,762 Último mensaje 30 Mayo 2006, 07:43 am
por byebye
Duda acerca de POO
PHP
Shell Root 3 2,602 Último mensaje 19 Septiembre 2011, 06:25 am
por Nakp
Duda sobre los macros
Programación C/C++
amchacon 4 1,999 Último mensaje 24 Mayo 2013, 02:02 am
por amchacon
Duda usando macros en GAS
ASM
0and6 1 2,400 Último mensaje 3 Julio 2017, 23:49 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines