[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