Foro de elhacker.net

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
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.

Código
  1. #ifdef __linux__
  2. #define LIMPIAR "CLEAR"
  3. #endif // __linux__
  4.  
  5. #ifdef __MINGW32__
  6. #define LIMPIAR "CLS"
  7. #endif // __MINGW32__
  8.  
  9. #include <stdio.h>
  10.  
  11. int main(int argc, char *argv[]){
  12.    printf("texto de prueba");
  13.    system(LIMPIAR);
  14.    printf("texto de prueba2");
  15.    return 0;
  16. }
  17.  
Saludos  :)


Título: Re: Codigo para identificar el Sistema operativo [C/C++] [Resuelto]
Publicado por: Caster en 28 Septiembre 2014, 11:56 am
Código
  1. #ifdef __MINGW32__
  2. #define LIMPIAR "CLS"
  3. #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?

Código:
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.