Codigo para identificar el Sistema operativo [C/C++] [Resuelto]

Iniciado por milx86, 27 Septiembre 2014, 23:48 PM

0 Miembros y 2 Visitantes están viendo este tema.

milx86

Hola a todos.
Sé que esta mal pedir codigo, o puedan pensar que quiero que me hagan la tarea, pero no es asi...

Verán, desde antes de entrar a la universidad yo usaba trisquel gnu/linux como S.O.
Pero cuando entre a la universidad me empezaron a asignar pequeños programitas de consola en C/C++ (hago menus con switch y requiero limpiar pantalla,etc) pero tengo que hacer mis programas usando system(cls) porque en la universidad solo hay pc's con windows xD!
Asi que desgraciadamente tuve que volver a windows, algunos dirán que es muy drástica esa decision  :-X
Lo que me gustaría es que me ayuden, si ustedes tienen algo para que mi programa reconozca que SO es y en base a eso, ejecute ciertas instrucciones
Ejemplo si el so es gnu/linux: que se ejecuten las ins. "clear" y si fuese windows "cls".
Otro ejemplo para hacer un programa que maneje archivos, el separador en la ruta en win es \ y en linux /.

Gracias de antemano.
La abstracción es la clave para lidiar con la complejidad.


milx86

Cita de: Caster en 28 Septiembre 2014, 00:20 AM
http://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros

Gracias man.
Bueno dejo el código, espero tambien le sirva a alguien.


#ifdef __linux__
#define LIMPIAR "CLEAR"
#endif // __linux__

#ifdef __MINGW32__
#define LIMPIAR "CLS"
#endif // __MINGW32__

#include <stdio.h>

int main(int argc, char *argv[]){
    printf("texto de prueba");
    system(LIMPIAR);
    printf("texto de prueba2");
    return 0;
}

Saludos  :)
La abstracción es la clave para lidiar con la complejidad.

Caster

#ifdef __MINGW32__
#define LIMPIAR "CLS"
#endif // __MINGW32__


Esto solo es válido si el compilador es MinGW sobre Windows de 32bits, mejor utiliza _WINDOWS, así será válido siempre.

Un saludo

Shout

Y qué tal esto?


inline void ClearScreen() {
#ifdef _WINDOWS
system("cls");
#else if defined linux / mac / etc
...
#endif
}

Así te evitas macros de strings y tienes la posibilidad de hacer más de una cosa por SO (que puede que aquí no sirva mucho, pero en otras funciones "portables" puede servir)
I'll bring you death and pestilence, I'll bring you down on my own

milx86

No sabia que tambien podia poner
#ifdef _WINDOWS_
#endif
más adentro del codigo  :o (al ver el simbolo # asumí que tenia que ir arriba xD).
Gracias a ambos, lo tendre en cuenta.
La abstracción es la clave para lidiar con la complejidad.