user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 16-10-2014 16:38:17

WarLocG
#! modo de compet

hybrid.c

Comme décris dans la source, je partage ce code afin d'aider les développeurs en C à rendre leur code portable sous Windows et GNU/Linux.

Pour les macros en C et C++, voir ici : http://linuxtrack.net/viewtopic.php?id=752

[==C++==]
/*
   Hybrid.c by WarLocG(C). Octobre 2014.
   
   Licence: aucune, cette source sert d'aide et peut egalement servir de tutoriel
            pour developper des programmes portables en C pour Windows et GNU/Linux.

   Objectif: - fournir un échantillon de code hybride tournant aussi bien
               sous GNU/Linux que sur Win32. Avec fonctions outils a la cle.
               
   N'étant pas utilisateur des produits Apple, ni BSD, il ne sera pas prévu d'implementer 
   de '#if defined' pour ces systemes dans la source, vous pouvez cependant l'implementer
   si vous en ressentez le besoin.

   Tests effectues sous:
    * GCC sous GNU/Linux :      [OK]
    * DevCPP sous Win32 (XP):   [OK]

   A tester:
    * Cygwin sous Win32/NT
    * CodeBlock sous Win et GNU/Linux

   A corriger: 
    * system() semble avoir des soucis sous Borland C++ 5, a patcher.
    PS: vu l'ancienneté du compilateur, ce n'est pas urgent.
    
   Outils:
    * clrScr() : effacer l ecran
    * pause() : marquer une pause
    * getString() : scanf() avec court-circuit pour Win inclus.
    PS: renvoit un char*. Pour les entiers, flottants et autres types, il necessite un cast.
   
 */

#include <stdio.h>
#include <stdlib.h> /* system() *a utiliser avec precaution!!!* */
#if defined (__WIN32) || (__NT__)
#  include <conio.h> /* getch() */
#  include <windows.h>
#endif

#define BUFFER 255 /* taille du buffer pour getString() */

/* receptionner les frappes clavier */
/* retour ligne linux = CR : 0x0A (10) */
/* retour ligne windows = CR + LF : 0x0A (10) + 0x0D (13) */
char string[BUFFER]=""; /* la variable (globale) */
char* getString()
{
  scanf("%s",string); /* 'string' etant deja une adresse, pas besoin de & */
#if defined (__WIN32) || (__NT__)
  getchar(); /* *court-circuit* recupere le caractere LF sous Windows */
#endif
  return string;
}

/* nettoyer l'ecran */
/* nom inspire de la fonction en pascal/delphi pour effacer l ecran */
void clrScr()
{
#if defined (__WIN32) || (__NT__)
  system("cls");
#elif defined (__linux__) || (__LINUX__) || (__unix__)
  system("clear");
#endif
}

/* marquer une pause */
void pause()
{
#if defined (__WIN32) || (__NT__)
  system("pause");
#elif defined (__linux__) || (__LINUX__) || (__unix__)
  system("echo \"Appuyez sur une touche pour continuer...\" && read a");
#endif
}

/* devient la fonction principale */
void core()
{
  /* inserer les instructions a la suite... */

  /* debut instructions */

  unsigned char i; /* 0...255 */

  /* test de la fonction de nettoyage de l'ecran */
  puts("hdsjkhgjdhjk\nhhgjq\ndjgjqsgj\njhgf");
  clrScr(); 
  
  /* simple hello */
  printf("%s","Hello le monde.\n");
  
  /* test de la fonction de pause */
  for (i=0;i<10;i++)
  {
    printf("%hd\n",i); 
    if (i==5) pause();
  }
  
  /* test de la fonction getString */
  puts("test de la fonction getString()");
  printf("Vous avez entre : %s\n",getString());
  
  /* fin instructions */
}

#if defined (_WIN32) || (__NT__)
  /* code pour API WIN32 ici */
  void main(int argc, char* argv[])
  {
    core();
    getch(); /* cliquer sur une touche pour sortir de la console. */
  }
#elif defined (__linux__) \
  || defined (__LINUX__) \
  || defined (__unix__) \
  || defined (__CYGWIN__)
  /* code pour API POSIX ici */
  int main(int argc, char* argv[])
  {
    core();
    return 0;
  }
#endif

Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

Pied de page des forums