[C con Clase] Portabilidad de código

Programante programante en gmail.com
Sab Jul 24 15:22:09 CEST 2010


 El 13/07/10 13:07, Gustavo Adolfo Torres Ortega escribió:
> Buenas a todos!
>
> El motivo por el cual escribo en esta ocasión, es para conocer cómo
> puedo hacer que mi código sea portable tanto en windows como en
> sistemas Linux.
> Tengo entendido que lo puedo lograr usando las directivas del
> precompilador y macros, pero los ejemplos que he visto se me hacen muy
> confusos.
>
> Concretamente, deseo saber esto porque hay funciones como
> system("CLS") que en Unix tendría que escribir como system("clear"), o
> tal vez system("PAUSE"), que en Linux no tengo que ponerlo.
>
> #include <stdio.h>
>
> int main()
> {
>   printf("Hola mundo");
>   system("PAUSE");
>   system("CLS");
>   printf("Termina el programa");
>   system("PAUSE);
>   return 0;
> }
>
> El código anterior funciona bien en windows, pero si lo compilo para
> Linux (yo uso ubuntu) tengo que quitar las líneas de system("PAUSE") y
> modificar "CLS" por "CLEAR".
>
> Alguien podría mostrarme un ejemplo de cómo hacerlo?
>
> De antemano, muchas gracias :]
Puedes hacer

int main()

{
  printf("Hola mundo");
  system("PAUSE");
#ifdef _WIN32
  system("CLS");
#else
  system("clear");
#endif
  printf("Termina el programa");
  system("PAUSE);
  return 0;
}


Pero como es un poco feo meter directivas de preprocesador por en medio
del programa, podemos tomar la idea de BorrarPantalla() de Reignerok:


#ifdef _WIN32

 #define BorrarPantalla() system("CLS");
#else
  #define BorrarPantalla() system("clear");
#endif

int main()

{
  printf("Hola mundo");
  system("PAUSE");
  BorrarPantalla();
  printf("Termina el programa");
  system("PAUSE);
  return 0;
}


También podrías meter todos los defines condicionales dentro de un .h
que incluyas al principio de tus programs.

Respecto a system("pause"), puedes esperar a con getchar() o cin.get(),
si el buffer de entrada está vacío.
Por eso Leonardo sugería hacer fflush(stdin);, lo cual sólo funciona con
Windows. Bajo Linux, hay que hacer __fpurge(stdio);
e incluir la cabecera #include <stdio_ext.h>

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100724/2a374ff4/attachment.html>


Más información sobre la lista de distribución Cconclase