Esto me parece que corresponde a lo que se llama metaprogramación.

Desde el simple hecho de que el código sea para Windows, o para Linux ya implica que son dos códigos distintos, por las system calls que cada uno use.

Pero sin embargo Natan quiere algo muy bueno, que es una misma fuente para ambas versiones. Algo así como una misma input, que pueda pasar por un compilador de Windows, y por un compilador para Linux con el mismo resultado lógico. (El físico, el código objeto, jamás será el mismo porque son dos plataformas distintas.)

Lo ideal y más elegante sería que se resuelva en tiempo de compilación, con directivas del compilador o del preprocesador, pero entonces la solución sería dependiente de los compiladores usados. O sea, intercambiamos dependencia del código frente a la plataforma, por dependencia frente al compilador.

Por otro lado me parece que el universo de plataformas en las que quiere correr Natan es muy reducido: Windows y Linux. Sólo dos y está dejando muchas afuera. Entonces sabiendo esto podría resolverlo en tiempo de ejecución. Tendría que invocar algo, una system call, un comando, que permita la misma expresión en el código, ser compilada y sin causar bugs de ejecución, pero que de resultados distintos en las dos plataformas. Luego se analiza el resultado y puede resolver en que plataforma corre.

Se me ocurre usar la función system(char*) de la cstdlib, ahí seguro compila. ¿Pero qué comando del shell te asegura un retorno distinto?

Desde ya que no puede ser algo como system("dir"), porque cualquiera puede tener un programita llamado dir en Linux, y entonces sería invocado este programita, y también puede retornar un 0 la llamada a system.

En fin, se me ocurre resolverlo por ahí. Interesante el problema.

 

----- Mensaje original -----

De: Pablo Martín Viva <[email protected]>

Fecha: Martes, Abril 14, 2009 10:07 am

Asunto: Re: [Prog] reconocer os usando c++

El codigo de por si es portable ya que usan este método la mayoria por no
decir todas las librerias cross platform de C++ para resolver sobre que
sistema operativo compilar y que includes deberán hacer...

Ahora el tema está en si esta informacion sola te sirve, o si necesitas
alguna informacion mas de tu sistema operativo al mejor estilo uname...

Tal vez puedas hacer una solucion mas completa haciendo un #ifdef _WIN32_
haces includes de windows.h e invocas la API de Win32 para que te de
informacion de tu sistema operativo windows, y sino esta definido, podes
guiarte en el codigo fuente de uname para ver como a travez de la API BSD
definida e incluida en muchas versiones de GNU / Linux - Unix obtener datos
de tu sistema operativo...

Saludos
Pablo

2009/4/14 Leandro Lucarella <[email protected]>

> Carlos Pantelides, el 14 de abril a las 05:39 me escribiste:
> > Igual, volviendo a la idea que te tiraron de usar los #ifdef, no es
> > incorrecta, pues desde el momento en que el código compilado no es
> > portable, ya podés saber en tiempo de compilación donde se va
> > a ejecutar. Si tuvieras que dicernir entre linux y bsd quizas si sea
> > problema. Igual (otra vez), no se que pasa si compilás para windows
> > y ejecutás bajo wine. No puedo compilar ahora para windows para hacer la
> > prueba, si lo hacés por favor contame los resultados.
>
> Que puede pasar? Va a decir que el OS es win32, eso se resolvió en tiempo
> de compilación...
>
> --
> Leandro Lucarella (luca) | Blog colectivo:
> http://www.mazziblog.com.ar/blog/
>
> ----------------------------------------------------------------------------
> GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
>
> ----------------------------------------------------------------------------
> Si pensas que el alma no se ve
> El alma sí se ve y puede combinar muy bien
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>


-- 
Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
de intercambiarlas ambos tenemos dos ideas.

Apoyando a la comunidad Open Source.

Facebook prifile:
http://www.facebook.com/profile.php?id=1244601012
Orkut prifile:
http://www.orkut.com/Profile.aspx?uid=12594853021246287134
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a