Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: milx86 en 27 Septiembre 2014, 23:48 PM

Título: Codigo para identificar el Sistema operativo [C/C++] [Resuelto]
Publicado por: milx86 en 27 Septiembre 2014, 23:48 PM
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.
Título: Re: Codigo para identificar el Sistema operativo [C/C++]
Publicado por: Caster en 28 Septiembre 2014, 00:20 AM
http://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros
Título: Re: Codigo para identificar el Sistema operativo [C/C++]
Publicado por: milx86 en 28 Septiembre 2014, 00:43 AM
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  :)
Título: Re: Codigo para identificar el Sistema operativo [C/C++] [Resuelto]
Publicado por: Caster en 28 Septiembre 2014, 11:56 AM
#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
Título: Re: Codigo para identificar el Sistema operativo [C/C++] [Resuelto]
Publicado por: Shout en 28 Septiembre 2014, 13:03 PM
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)
Título: Re: Codigo para identificar el Sistema operativo [C/C++] [Resuelto]
Publicado por: milx86 en 28 Septiembre 2014, 17:03 PM
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.