<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    El 13/07/10 13:07, Gustavo Adolfo Torres Ortega escribió:
    <blockquote cite="mid:SNT138-w3080B33664691D61A78CBCAFB90@phx.gbl"
      type="cite">
      <style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
      Buenas a todos!<br>
      <br>
      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.<br>
      Tengo entendido que lo puedo lograr usando las directivas del
      precompilador y macros, pero los ejemplos que he visto se me hacen
      muy confusos.<br>
      <br>
      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.<br>
      <br>
      #include <stdio.h><br>
      <br>
      int main()<br>
      {<br>
        printf("Hola mundo");<br>
        system("PAUSE");<br>
        system("CLS");<br>
        printf("Termina el programa");<br>
        system("PAUSE);<br>
        return 0;<br>
      }<br>
      <br>
      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".<br>
      <br>
      Alguien podría mostrarme un ejemplo de cómo hacerlo?<br>
      <br>
      De antemano, muchas gracias :]<br>
    </blockquote>
    Puedes hacer<br>
    <br>
    int main()<br>
    <pre wrap="">{
  printf("Hola mundo");
  system("PAUSE");
#ifdef _WIN32
  system("CLS");
#else
  system("clear");
#endif
  printf("Termina el programa");
  system("PAUSE);
  return 0;
}<a class="moz-txt-link-freetext" href="http://webpy.org/">
</a></pre>
    <br>
    Pero como es un poco feo meter directivas de preprocesador por en
    medio del programa, podemos tomar la idea de BorrarPantalla() de
    Reignerok:<br>
    <br>
    <br>
    <pre wrap="">#ifdef _WIN32</pre>
     #define BorrarPantalla() system("CLS");
    <br>
    #else<br>
      #define BorrarPantalla() system("clear");<br>
    #endif<br>
    <br>
    int main()<br>
    <pre wrap="">{
  printf("Hola mundo");
  system("PAUSE");
  BorrarPantalla();
  printf("Termina el programa");
  system("PAUSE);
  return 0;
}</pre>
    <br>
    También podrías meter todos los defines condicionales dentro de un
    .h que incluyas al principio de tus programs.<br>
    <br>
    Respecto a system("pause"), puedes esperar a con getchar() o
    cin.get(), si el buffer de entrada está vacío.<br>
    Por eso Leonardo sugería hacer fflush(stdin);, lo cual sólo funciona
    con Windows. Bajo Linux, hay que hacer __fpurge(stdio);<br>
    e incluir la cabecera #include <stdio_ext.h><br>
    <br>
  </body>
</html>