• Lunes 29 de Abril de 2024, 05:46

Autor Tema:  Compilacion Condicional  (Leído 3961 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Compilacion Condicional
« en: Martes 27 de Marzo de 2007, 13:06 »
0
Hola, necisito hacer un codigo en el cual haya una compilacion condicional entre windows y linux. Existe algunas macro para esto?, o sea, como sabe el compilador si esta solbre win o linux?
Encontre esto:

Código: Text
  1. #ifdef MSDOS
  2.   ... código para MSDOS ...
  3. #else
  4. #  ifdef UNIX
  5.   ... código para UNIX ...
  6. #  else
  7.   ... código para otro sistema ...
  8. #  endif
  9. #endif
  10.  
O sea, donde estan definidas esas macros?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #1 en: Martes 27 de Marzo de 2007, 13:16 »
0
Generalmente se pasan como parametro al compilador en la linea de comandos, por ejemplo en VC++ usas -DNOMBRE para definir una.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #2 en: Martes 27 de Marzo de 2007, 14:49 »
0
ahhh, o sea definis la macro como parametro al compilador, no?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Compilacion Condicional
« Respuesta #3 en: Martes 27 de Marzo de 2007, 14:50 »
0
Cita de: "AnioN"
o sea, como sabe el compilador si esta solbre win o linux?
 
tambien es usual que un compilador tenga simboloS  'precargados' por default, de tal modo que si se esta haciendo una aplicación de consola  ya en algun lugar se se haya hecho un

#define _CONSOLE
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Compilacion Condicional
« Respuesta #4 en: Martes 27 de Marzo de 2007, 14:54 »
0
Cita de: "AnioN"
mmm, no entiendo bien a lo que te referis, me podes pasar algun link que explique mas o menos como es?
para gcc, al compilar por ejemplo:

Código: Text
  1. gcc -DDEBUGGING mycode.c
  2.  

en el compilador de C++ de microsoft

Código: Text
  1. cl mycode.c /DDEBUGGING
  2.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #5 en: Martes 27 de Marzo de 2007, 15:01 »
0
Cita de: "JuanK"
Cita de: "AnioN"
mmm, no entiendo bien a lo que te referis, me podes pasar algun link que explique mas o menos como es?
para gcc, al compilar por ejemplo:

Código: Text
  1. gcc -DDEBUGGING mycode.c
  2.  

en el compilador de C++ de microsoft

Código: Text
  1. cl mycode.c /DDEBUGGING
  2.  
ahi estas definiendo una macro vacia no?, seria DEBUGGING.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Compilacion Condicional
« Respuesta #6 en: Martes 27 de Marzo de 2007, 15:06 »
0
mm bueno yo no lo llamaría una macro sino un symbolo para que sea tenido en cuenta por el preprocesador.

Si bien ese simbolo se puede definir de manera interna en el código, similar a una macro

Código: Text
  1.  
  2. #ifndef DEBUG
  3. #define DEBUG
  4. #endif
  5.  
  6.  
lo cual de no hacerce habria que hacer:
Código: Text
  1.  
  2. cl mycode.c /DDEBUG
  3.  
  4. o
  5.  
  6. gcc -DDEBUG mycode.c
  7.  

por ejemplo cuando le dices al compilador que compile en modo DEBUG el carga este simbolo automaticamente aunque no se especifique.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #7 en: Martes 27 de Marzo de 2007, 15:11 »
0
claro, ahora estoy entendiendo como viene la mano. Me surgio otra duda, a que llamarias macro vos?, porque las definiciones que encuentro son un poco confusas.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Compilacion Condicional
« Respuesta #8 en: Martes 27 de Marzo de 2007, 15:16 »
0
una macro por ejemplo

Código: Text
  1. #define Assert(a,b) assert( a && b )
  2.  
Código: Text
  1. #define ALINEAR( address, bytes) ( (((uint)address)+(bytes)-1)& (~((bytes)-1)) )
  2.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #9 en: Martes 27 de Marzo de 2007, 15:18 »
0
Cita de: "AnioN"
ahhh, o sea definis la macro como parametro al compilador, no?
Exacto  B) El preprocesador se encarga de definir ese simbolo con valor 1. Y podes usarlo como te dije -DNOMBRE o con /DNOMBRE.

http://msdn2.microsoft.com/en-us/library/h...5c8(VS.80).aspx

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #10 en: Martes 27 de Marzo de 2007, 15:23 »
0
Cita de: "AnioN"
claro, ahora estoy entendiendo como viene la mano. Me surgio otra duda, a que llamarias macro vos?, porque las definiciones que encuentro son un poco confusas.
Cuando tiene lista parametros (vacia o no) se considera una macro.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Compilacion Condicional
« Respuesta #11 en: Martes 27 de Marzo de 2007, 15:36 »
0
Mucho del código que he visto por allí para Windows y para Linux lo hace así:

Código: Text
  1.  
  2. #ifdef WIN32
  3.   // Código específico de Windows
  4. # else
  5.   // Código específico Linux
  6. #endif
  7.  
  8.  

Claro, esto cuando se hace uso de la API de Windows (la cual define WIN32).
La imaginación es el límite.
Hardware & Software | Mexchip

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #12 en: Martes 27 de Marzo de 2007, 15:55 »
0
Cita de: "Geo"
Claro, esto cuando se hace uso de la API de Windows (la cual define WIN32).

En realidad esa macro se pasa por defecto en la linea de comandos de un proyecto C/C++ en Visual Studio.

Pero tambien hay macros predefinidas segun el standard ANSI y ademas en VC++ tenes otros como:

_WIN32
 Defined for applications for Win32 and Win64. Always defined.
 
_WIN64
 Defined for applications for Win64.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Compilacion Condicional
« Respuesta #13 en: Martes 27 de Marzo de 2007, 16:00 »
0
Eternal Idol, no es necesario postear y borrar 3 veces prácticamente lo mismo, para eso existe el botón:



Luego dicen que yo no hayo como subir mi promedio de mensajes.  :ph34r:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #14 en: Martes 27 de Marzo de 2007, 16:17 »
0
Cita de: "JuanK"
Eternal Idol, no es necesario
¿Te pregunte algo yo? Me parece que no asi que ya sabes lo que pienso hacer con tu afirmacion.


Si quisiera aumentar o mantener mi ritmo de mensajes haria lo mismo que vos: responder dos horas despues lo mismo que ya dijo alguien. Otra cosa si esto no reduce el contador despues de borrar un mensaje ya sabes a quien te podes quejar.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Compilacion Condicional
« Respuesta #15 en: Martes 27 de Marzo de 2007, 16:59 »
0
Muchas gracias a ambos. :) . No se peleen que sus respuestas son muy utiles.