[C] rendre un code portable Darwin/Windows ?

Aurélien-A

Membre confirmé
19 Mai 2005
76
3
38
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
 

tatouille

Membre expert
1 Juin 2004
5 174
493
Stanford CA
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
 

molgow

Membre expert
Club MacG
4 Janvier 2002
5 496
613
38
Suisse
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

Aurélien-A

Membre confirmé
19 Mai 2005
76
3
38
Edinburgh
www.billou-net.info
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.
 

ntx

Membre vénérable
Club MacG
15 Octobre 2004
12 128
376
92
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:
 

SuperCed

Membre expert
Club MacG
20 Juin 2001
1 242
57
42
superced.rb38.eu
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.
 

Didier Guillion

Membre expert
Club MacG
20 Juillet 2001
3 244
164
59
Toulouse
www.myriad-online.com
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