[C] rendre un code portable Darwin/Windows ?

Aurélien-A

Membre confirmé
19 Mai 2005
76
3
42
Edinburgh
www.billou-net.info
Re-bonjour,

Pour les mêmes raisons que citées dans le post "Compilateur Pascal", je cherche un moyen, pour éviter les problèmes de portabilité, de rendre mes codes sources en C (en ligne de commande) à la fois sous Windows/dos (environnement turbo C utilisé en TD) et sous Darwin.

Questions:

les fonctions "main" prototypées ainsi:

void main()

passent la compilation sous Turbo C mais pas sous gcc. Le protoype

int main()
{ return 0; }

fonctionne. Celà pose-t-il un problème sous TC ?

Ensuite, on utilise souvent pour le préprocesseur:

#include<conio.h>

sous TC. Ca fonctionne uniquement sous TC/DOS. Un équivalent sous Darwin/Gcc ? Le but est l'appel des fonctions

clrscr(); (effacer l'écran)
getch();

Je vous en remercie d'avance.

Aurélien
 
Re-bonjour,

Pour les m&#234;mes raisons que cit&#233;es dans le post "Compilateur Pascal", je cherche un moyen, pour &#233;viter les probl&#232;mes de portabilit&#233;, de rendre mes codes sources en C (en ligne de commande) &#224; la fois sous Windows/dos (environnement turbo C utilis&#233; en TD) et sous Darwin.

Questions:

les fonctions "main" prototyp&#233;es ainsi:

void main()

passent la compilation sous Turbo C mais pas sous gcc. Le protoype

int main()
{ return 0; }

fonctionne. Cel&#224; pose-t-il un probl&#232;me sous TC ?

Ensuite, on utilise souvent pour le pr&#233;processeur:

#include<conio.h>

sous TC. Ca fonctionne uniquement sous TC/DOS. Un &#233;quivalent sous Darwin/Gcc ? Le but est l'appel des fonctions

clrscr(); (effacer l'&#233;cran)
getch();

Je vous en remercie d'avance.

Aur&#233;lien
clrscr(); (effacer l'&#233;cran)
getch();

Curses gut

theoriquement

gcc -o test test.c -lncurses

/****************/

#include <stdio.h>
#include <ncurses.h>

int main()//int main(void)
{
char arr[12]={"Hello World!"};
int i;

//clrscr();
system(clear);

printf("\n");

for(i=0;i<11;++i)
printf("%c ",arr);

printf("\n");

// junk
int ch = getch();
switch (ch) {
case KEY_BACKSPACE: /* user pressed backspace */
...
case KEY_UP: /* user pressed up arrow key */
...
case KEY_DOWN: /* user pressed up arrow key */
...
case 'A' .... /* user pressed key 'A' */
...
}


return 0;
}

mais sous darwin ncurse est assez buggy
disons des comportements assez &#233;tranges

http://www.gnu.org/software/ncurses/ncurses.html
 
Une bonne id&#233;e d&#233;j&#224; pour faire du code propre et portable est d&#233;j&#224; de faire du C-ANSI si tu le peux, et compiler avec "gcc -ansi". Bon je sais pas si c'est vraiment utile pour la portabilit&#233; que tu recherches...
 
  • J’aime
Réactions: daffyb
Merci de vos conseils. En td de c mon enseignant évalue non pas sur un programme fini mais sur un listing papier du code source et des fonctions principales. Le travail sur l'interface est de moindre importance. Ca me débarrasse donc du problème exposé et ça me permet de travailler en C ansi. Je me suis entretenu à ce propos avec mon prof et celà ne lui pose pas de problème.

AA.
 
Bonjour,
je trouve plus utile d'apprendre le langage C telle que la norme le défini (C ANSI) et non les différents dialectes des éditeurs, car tout le monde ne programme pas en Turbo-C ou Visual-C sous Windows.
Donc continue dans ta démarche et bon courage :up:
 
Peut être devrais-tu utiliser getChar à la place de getch?
Et pour le clear, je ne sais pas trop, mais il doit exister quelque chose en C ANSI.

Conio.h est spécifique au DOS.
 
Bonsoir,


Par defaut le C, a la norme ANSI, offre tres peu de commande pour acceder a l'ecran de maniere standard.

Voici un résumé des commandes :

http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html

Par contre tu peut tres bien effectuer une compilation conditionnelle qui utilisera telle ou telle specificité selon la plateforme en utilisant

#ifdef xxxx

#else

#endif

Cordialement