Duda sobre portabilidad

Iniciado por ivancea96, 2 Julio 2013, 01:44 AM

0 Miembros y 1 Visitante están viendo este tema.

ivancea96

Yo programo C++ en Windows 7. Programo en consola, principalmente porque no se mucho visual ni de API's xD

La duda es...
Si, programando en consola, cambio los -system("cls");- y -system("pause");- (supongo que una mala costumbre mía), y pongo comandos de la librería estandar, ¿sería portable a otros Windows, Unix, Apple, y diversos sistemas?

EDITO: Busco la forma de borrar la pantalla de consola sin usar system("cls"), clrscr(), ni escribir 100 saltos de linea.

amchacon

Cualquier función de la estándar es portable a cualquier sistema.

cin.get(); es un sustituto de pause. De limpiar no conozco ninguno, aunque puedes utilizar Compilación Condicional.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

ivancea96

Mm gracias amchacon. Echaré un vistazo a la compilación condicional.
Mejor dicho, buscaré alguna guia sobre eso, tengo que echarle un vistazo a fondo, que nunca me paré mucho. xD

amchacon

#3
Está tirado:

Código (cpp) [Seleccionar]
void LimpiarPantalla()
{
   #ifdef _WIN32
   system("CLS");
   #else
   system("clear");
   #endif
}


Esto se interpetra así: "Sí estás en una plataforma Windows, compila este código, si no lo estás compila este otro".

Puedes ver los #define de los distintos sistemas operativos aquí:
http://sourceforge.net/p/predef/wiki/OperatingSystems/

Aunque nada te impide a crearte los tuyos propios:
Código (cpp) [Seleccionar]
#define WINDOWS

void LimpiarPantalla()
{
   #ifdef WINDOWS
   system("CLS");
   #else
   system("clear");
   #endif
}


Cuando no estemos en Windows, quitamos el define y ya está.

O bien, en vez de poner el #define en el código nos vamos a project -> build options -> #defines y ponemos: WINDOWS.

Puede ser incluso más interesante crear dos opciones de construcción: Release Windows y Release Linux. En cada una ponemos nuestro #define correspondiente.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

eferion

O bien, si eres más purista y no te gustan los condicionales del compilador en medio del código:

Código (cpp) [Seleccionar]

#ifdef _WIN32
char* limpiar_pantalla_cmd = "CLS";
#else
char* limpiar_pantalla_cmd = "clear";
#endif

void func( )
{

  // ...

  system( limpiar_pantalla_cmd );

  // ...

}

ivancea96

Muchas gracias amchacon, creo que eso venía a ser lo que buscaba.
Eferion, gracias también, ya que tengo varios system("cls"), y ayudará bastante.