Bonsoir j'essaie d'experimenter avec les pointeurs de pointeur et les
tableau a un dimension et je ne comprend pas vraiment pourquoi le petit
bout de code ci dessous fait un seg-fault dans une focntion mais marche
dans le main.
Si quelqu'un a un recapitulatif sur l'utilisation des tableau a n dim et
leur relatin avec les les poiunteur de pointeur je prends...
merci,
O.
=================================code =====================
#include<stdio.h>
#include<stdlib.h>
void afficheall(char *** t);
int main(void){
int i,j;
char * t[3][3] ={
{"123","456","789"},
{"aze","rty","uio"},
{"wxc","vbn","jkl"}
};
/* ici Ok */
for (i=0;i<3;i++){
for (j=0;j<3;j++){
printf("-t,---%sA \n",*((*(t+i))+j));
/* printf("----%sB\n",*t[i]); */
/* printf("------%sB\n",*t[j]); */
}
}
/* la non ... Segmentation fault*/
afficheall(t);
return 0;
}
void afficheall(char *** t){
int i,j;
for (i=0;i<3;i++){
for (j=0;j<3;j++){
printf("-t,---%sA \n",*((*(t+i))+j));
// printf("----%sB\n",*t[i]);
//printf("------%sB\n",*t[j]);
Portable ne signifie pas universellement compatible, mais que l'on n'utilise pas des fonctions spécifiques à la machine ou de librairie non public et surtout que les sources soit public.
Le prog fonctionne modèle "huge" version TC2.0 et version TC2.1 (dernière correction ci dessous) et je peut envoyer le source et l'exe qui fonctionne à qui le veut.
Effectivement le TC2.0 que j'ai utilisé n'est pas le mème que la version public TC2.1 2 choses différentes, 1) le memset utilise un pointeur coresspondant au type de modèle déclarer, donc utilisé le modéle "huge" si l'on veut utilisé des pointeurs far comme je l'ai fait 2) le prototype free() est dans "stdlib.h" pour cette version, et necessite impérativement un cast de type (void *) free( (void *) TabDeTab[i]); Etonnant car void * , ce n'est pas un pointeur sur rien du tout , un pointeur de type inconnu.
TC2 dans le domaine public téléchargement gratuit (je viens de le charger pour tester) http://www.programmersheaven.com/zone3/cat215/6619.htm Une mine de prog en TC http://www.bookcase.com/library/software/msdos.devel.apps.turbo-c.html
Error fclc.c 9: Declaration syntax error J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est char far **TabDeTab; ça passe ! Il y aurait pu eu une fausse manip par là ?
3) Un test de taille serait effectivement necessaire surtout dans les petit modèle. mais un modele huge permet d'utiliser n tableaux jusqu'a utilisation total de la mémoire basse. Je conviens que pour un tableau très grand il faut passer par la mémoire étendu , les fonctions standard ne sont alors plus utilisables
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet... getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog s'arrète
bien !
r est inutile. ah, bon , alors la prochaine écriture se fera au niveau de la dernière
colonne écrite. r (retour chariot) n (ligne suivante) un n ne retourne pas forcément à la colonne 0 Mais ça dépend de la machine , il est préférable de mettre les deux ! et la "rn" c'est bien une écriture portable ! "n" seul ne l'ai pas !
En dehors du fait que ce ne soit pas portable, c'est surtout la première partie de la preuve que tu ne comprends pas ce que veulent dire les modèles
mémoires en programmation C sous DOS. le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog ,d'ou la
necessité d'un pointeur far. Les compilateurs Windows ne se soucis plus de ce détail il fonctionnent avec la mémoire étendue.
L'appel du nombre de tableaux est un "int" on pourrait mettre un long pour une "huge application" Je m'explique le buffer pourrait être très court , et l'on pourrait avoir
besoin de plus de 65535 buffers , ce qui necessite alors un type long.
pat
"Antoine Leca" a écrit dans le message news: cvupfo$2jv$
En 42223417$0$11709$, pat va escriure:
Voila un exemple de tableau de tableaux écrit en 5 minutes mais sans plantage et sutout simple !
Bien
Alouer en dynamique et variable.
Compiler et tester sur TC2
Bien. Et ailleurs ?
C'est du C de base portable ,
Non
le fichier "Alloc.h" s'apelle parfois "malloc.h" sur certain compilo.
Et <stdlib.h> à peu près partout. Y compris dans TC2.
L'appel du nombre de tableaux est un "int" on pourrait mettre un long pour une "huge application"
?
ou des "unsigned int" ou "unsigned long" chacun fera sa propre cuisine...
Un bon exemple vaux mieux qu'un grand discours
Effectivement. L'exemple est très illustratif de ton discours, à défaut de l'être de ton propos.
#include "stdio.h" #include "alloc.h"
/* pointeur de tableau de tableau */ /* le seul ,l,ment Global */ /* les tableaux eux mSme sont sur le stack */ char far **TabDeTab;
Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International Error fclc.c 9: Declaration syntax error
En dehors du fait que ce ne soit pas portable, c'est surtout la première partie de la preuve que tu ne comprends pas ce que veulent dire les modèles
mémoires en programmation C sous DOS.
main()
C'est un détail sans importance, mais tu devrais prendre l'habitude de mettre le type de retour, int.
/* efface l'ecran */ clrscr();
Undefined symbol '_clrscr' in module pat.c
for (t=0 ; t<26; t++) { memset(TabDeTab[t],65+t,30); /* avec 30 a, b,c, etc.. */
Voici la seconde partie.
TabDeTab est un tableau de pointeurs long (far) vers des chaînes. Ici, tu initialises (avec un code très tordu et mal commenté, mais c'est vraiment de
l'anecdote) des pointeurs « normaux » (pour le modèle en cours).
printf("%srn",TabDeTab[t]);
Même problème.
printf("Appuyer sur une touche pour lib,rer la m,moirern");
r est inutile.
getchar();
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet...
Et voici la troisième partie. Ici, tu utilises malloc(), donc là encore des pointeurs « normaux ». De fait, cela veut dire que le code dans main() va *apparement* fonctionner, car tout le programme utilises les pointeurs normaux même s'il prétend utiliser des pointeurs longs. Mais si tu augmentes un peu la taille de ton tableau, disons jusqu'à 250 lignes, ton programme va se plaindre pour « erreur d'alloc », alors qu'en fait il te reste plein de mémoire disponible,
il suffit simplement de savoir aller la chercher.
Antoine
bonjour,
Portable ne signifie pas universellement compatible, mais que l'on n'utilise
pas des fonctions spécifiques à la machine ou de librairie non public et
surtout que les sources soit public.
Le prog fonctionne modèle "huge" version TC2.0 et version TC2.1 (dernière
correction ci dessous) et je peut envoyer le source et l'exe qui fonctionne
à qui le veut.
Effectivement le TC2.0 que j'ai utilisé n'est pas le mème que la version
public TC2.1
2 choses différentes,
1) le memset utilise un pointeur coresspondant au type de modèle déclarer,
donc utilisé le modéle "huge" si l'on veut utilisé des pointeurs far comme
je l'ai fait
2) le prototype free() est dans "stdlib.h" pour cette version, et necessite
impérativement un cast de type (void *)
free( (void *) TabDeTab[i]);
Etonnant car void * , ce n'est pas un pointeur sur rien du tout , un
pointeur de type inconnu.
TC2 dans le domaine public téléchargement gratuit (je viens de le charger
pour tester)
http://www.programmersheaven.com/zone3/cat215/6619.htm
Une mine de prog en TC
http://www.bookcase.com/library/software/msdos.devel.apps.turbo-c.html
Error fclc.c 9: Declaration syntax error
J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est
char far **TabDeTab;
ça passe !
Il y aurait pu eu une fausse manip par là ?
3)
Un test de taille serait effectivement necessaire surtout dans les petit
modèle.
mais un modele huge permet d'utiliser n tableaux jusqu'a utilisation total
de la mémoire basse.
Je conviens que pour un tableau très grand il faut passer par la mémoire
étendu , les fonctions standard ne sont alors plus utilisables
Une touche ne suffira pas, il faudra probablement appuyer sur la touche
Intro pour obtenir le moindre effet...
getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog s'arrète
bien !
r est inutile.
ah, bon , alors la prochaine écriture se fera au niveau de la dernière
colonne écrite.
r (retour chariot) n (ligne suivante)
un n ne retourne pas forcément à la colonne 0
Mais ça dépend de la machine , il est préférable de mettre les deux !
et la "rn" c'est bien une écriture portable !
"n" seul ne l'ai pas !
En dehors du fait que ce ne soit pas portable, c'est surtout la première
partie de la preuve que tu ne comprends pas ce que veulent dire les
modèles
mémoires en programmation C sous DOS.
le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog ,d'ou la
necessité d'un pointeur far.
Les compilateurs Windows ne se soucis plus de ce détail il fonctionnent avec
la mémoire étendue.
L'appel du nombre de tableaux est un "int" on pourrait mettre un
long pour une "huge application"
Je m'explique le buffer pourrait être très court , et l'on pourrait avoir
besoin de plus de 65535 buffers , ce qui necessite alors un type long.
pat
"Antoine Leca" <root@localhost.invalid> a écrit dans le message news:
cvupfo$2jv$1@shakotay.alphanet.ch...
En 42223417$0$11709$8fcfb975@news.wanadoo.fr, pat va escriure:
Voila un exemple de tableau de tableaux écrit en 5 minutes mais sans
plantage et sutout simple !
Bien
Alouer en dynamique et variable.
Compiler et tester sur TC2
Bien. Et ailleurs ?
C'est du C de base portable ,
Non
le fichier "Alloc.h" s'apelle parfois "malloc.h" sur certain compilo.
Et <stdlib.h> à peu près partout. Y compris dans TC2.
L'appel du nombre de tableaux est un "int" on pourrait mettre un
long pour une "huge application"
?
ou des "unsigned int" ou "unsigned long" chacun fera sa propre
cuisine...
Un bon exemple vaux mieux qu'un grand discours
Effectivement. L'exemple est très illustratif de ton discours, à défaut de
l'être de ton propos.
#include "stdio.h"
#include "alloc.h"
/* pointeur de tableau de tableau */
/* le seul ,l,ment Global */
/* les tableaux eux mSme sont sur le stack */
char far **TabDeTab;
Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International
Error fclc.c 9: Declaration syntax error
En dehors du fait que ce ne soit pas portable, c'est surtout la première
partie de la preuve que tu ne comprends pas ce que veulent dire les
modèles
mémoires en programmation C sous DOS.
main()
C'est un détail sans importance, mais tu devrais prendre l'habitude de
mettre le type de retour, int.
/* efface l'ecran */
clrscr();
Undefined symbol '_clrscr' in module pat.c
for (t=0 ; t<26; t++) {
memset(TabDeTab[t],65+t,30); /* avec 30 a, b,c, etc.. */
Voici la seconde partie.
TabDeTab est un tableau de pointeurs long (far) vers des chaînes. Ici, tu
initialises (avec un code très tordu et mal commenté, mais c'est vraiment
de
l'anecdote) des pointeurs « normaux » (pour le modèle en cours).
printf("%srn",TabDeTab[t]);
Même problème.
printf("Appuyer sur une touche pour lib,rer la m,moirern");
r est inutile.
getchar();
Une touche ne suffira pas, il faudra probablement appuyer sur la touche
Intro pour obtenir le moindre effet...
Et voici la troisième partie.
Ici, tu utilises malloc(), donc là encore des pointeurs « normaux ». De
fait, cela veut dire que le code dans main() va *apparement* fonctionner,
car tout le programme utilises les pointeurs normaux même s'il prétend
utiliser des pointeurs longs. Mais si tu augmentes un peu la taille de ton
tableau, disons jusqu'à 250 lignes, ton programme va se plaindre pour «
erreur d'alloc », alors qu'en fait il te reste plein de mémoire
disponible,
Portable ne signifie pas universellement compatible, mais que l'on n'utilise pas des fonctions spécifiques à la machine ou de librairie non public et surtout que les sources soit public.
Le prog fonctionne modèle "huge" version TC2.0 et version TC2.1 (dernière correction ci dessous) et je peut envoyer le source et l'exe qui fonctionne à qui le veut.
Effectivement le TC2.0 que j'ai utilisé n'est pas le mème que la version public TC2.1 2 choses différentes, 1) le memset utilise un pointeur coresspondant au type de modèle déclarer, donc utilisé le modéle "huge" si l'on veut utilisé des pointeurs far comme je l'ai fait 2) le prototype free() est dans "stdlib.h" pour cette version, et necessite impérativement un cast de type (void *) free( (void *) TabDeTab[i]); Etonnant car void * , ce n'est pas un pointeur sur rien du tout , un pointeur de type inconnu.
TC2 dans le domaine public téléchargement gratuit (je viens de le charger pour tester) http://www.programmersheaven.com/zone3/cat215/6619.htm Une mine de prog en TC http://www.bookcase.com/library/software/msdos.devel.apps.turbo-c.html
Error fclc.c 9: Declaration syntax error J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est char far **TabDeTab; ça passe ! Il y aurait pu eu une fausse manip par là ?
3) Un test de taille serait effectivement necessaire surtout dans les petit modèle. mais un modele huge permet d'utiliser n tableaux jusqu'a utilisation total de la mémoire basse. Je conviens que pour un tableau très grand il faut passer par la mémoire étendu , les fonctions standard ne sont alors plus utilisables
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet... getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog s'arrète
bien !
r est inutile. ah, bon , alors la prochaine écriture se fera au niveau de la dernière
colonne écrite. r (retour chariot) n (ligne suivante) un n ne retourne pas forcément à la colonne 0 Mais ça dépend de la machine , il est préférable de mettre les deux ! et la "rn" c'est bien une écriture portable ! "n" seul ne l'ai pas !
En dehors du fait que ce ne soit pas portable, c'est surtout la première partie de la preuve que tu ne comprends pas ce que veulent dire les modèles
mémoires en programmation C sous DOS. le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog ,d'ou la
necessité d'un pointeur far. Les compilateurs Windows ne se soucis plus de ce détail il fonctionnent avec la mémoire étendue.
L'appel du nombre de tableaux est un "int" on pourrait mettre un long pour une "huge application" Je m'explique le buffer pourrait être très court , et l'on pourrait avoir
besoin de plus de 65535 buffers , ce qui necessite alors un type long.
pat
"Antoine Leca" a écrit dans le message news: cvupfo$2jv$
En 42223417$0$11709$, pat va escriure:
Voila un exemple de tableau de tableaux écrit en 5 minutes mais sans plantage et sutout simple !
Bien
Alouer en dynamique et variable.
Compiler et tester sur TC2
Bien. Et ailleurs ?
C'est du C de base portable ,
Non
le fichier "Alloc.h" s'apelle parfois "malloc.h" sur certain compilo.
Et <stdlib.h> à peu près partout. Y compris dans TC2.
L'appel du nombre de tableaux est un "int" on pourrait mettre un long pour une "huge application"
?
ou des "unsigned int" ou "unsigned long" chacun fera sa propre cuisine...
Un bon exemple vaux mieux qu'un grand discours
Effectivement. L'exemple est très illustratif de ton discours, à défaut de l'être de ton propos.
#include "stdio.h" #include "alloc.h"
/* pointeur de tableau de tableau */ /* le seul ,l,ment Global */ /* les tableaux eux mSme sont sur le stack */ char far **TabDeTab;
Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International Error fclc.c 9: Declaration syntax error
En dehors du fait que ce ne soit pas portable, c'est surtout la première partie de la preuve que tu ne comprends pas ce que veulent dire les modèles
mémoires en programmation C sous DOS.
main()
C'est un détail sans importance, mais tu devrais prendre l'habitude de mettre le type de retour, int.
/* efface l'ecran */ clrscr();
Undefined symbol '_clrscr' in module pat.c
for (t=0 ; t<26; t++) { memset(TabDeTab[t],65+t,30); /* avec 30 a, b,c, etc.. */
Voici la seconde partie.
TabDeTab est un tableau de pointeurs long (far) vers des chaînes. Ici, tu initialises (avec un code très tordu et mal commenté, mais c'est vraiment de
l'anecdote) des pointeurs « normaux » (pour le modèle en cours).
printf("%srn",TabDeTab[t]);
Même problème.
printf("Appuyer sur une touche pour lib,rer la m,moirern");
r est inutile.
getchar();
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet...
Et voici la troisième partie. Ici, tu utilises malloc(), donc là encore des pointeurs « normaux ». De fait, cela veut dire que le code dans main() va *apparement* fonctionner, car tout le programme utilises les pointeurs normaux même s'il prétend utiliser des pointeurs longs. Mais si tu augmentes un peu la taille de ton tableau, disons jusqu'à 250 lignes, ton programme va se plaindre pour « erreur d'alloc », alors qu'en fait il te reste plein de mémoire disponible,
il suffit simplement de savoir aller la chercher.
Antoine
Antoine Leca
En 42230a3d$0$808$, pat va escriure:
Portable ne signifie pas universellement compatible, mais que l'on n'utilise pas des fonctions spécifiques à la machine ou de librairie non public et surtout que les sources soit public.
Voui. far, par exemple, c'est plutôt spécifique... tout le contraire de portable, quoi.
De plus, portable, cela signifie aussi que l'on précise les conditions d'utilisation. Si l'on compile pour le modèle huge, on le précise. Cela évite aux autres de faire chercher pendant des heures pourquoi cela ne marche pas chez eux...
Quand au fait que les sources soient publics, c'est une galéjade.
TC2 dans le domaine public
Non.
téléchargement gratuit
Oui. Et avant de pouvoir le charger il y a une notice qui précise les conditions d'utilisation. Et cette notice ne précise pas que le logiciel a été versé dans le domaine public, bien au contraire.
Error fclc.c 9: Declaration syntax error J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est char far **TabDeTab; ça passe ! Il y aurait pu eu une fausse manip par là ?
Chez toi, c'est bien possible.
Essayes donc tcc -ms -A votrepro.c, pour voir ce qui se passe.
Je conviens que pour un tableau très grand il faut passer par la mémoire étendu , les fonctions standard ne sont alors plus utilisables
En fait, je pense qu'il suffit de retoucher _brk()/_sbrk() pour traiter correctement les segments huge: TC2.01 considère que deux segments huge adjacents sont séparés de 0x1000, ce qui n'est pas toujours vrai: on trouve plus souvent 8 de nos jours...
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet... getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog
s'arrète bien !
Appuye sur la touche Ç de ton clavier, et rien que sur celle-là. Et racontes-moi comment se passe l'arrêt de ton programme.
r est inutile. ah, bon , alors la prochaine écriture se fera au niveau de la
dernière colonne écrite.
Non (sauf si tu as modifié en profondeur _FPUTN, et alors là on ne parle plus de choses portables, ce ne serait portable que chez toi, et encore).
Mais ça dépend de la machine , il est préférable de mettre les deux
Le jour où tu verras tes impressions gâcher deux fois plus de feuilles parce qu'elles seront imprimées une ligne sur deux, on dira que cela dépend de la machine...
et la "rn" c'est bien une écriture portable !
Je n'ai pas dit le contraire. C'est juste que son effet est parfois différent de l'intention de celui qui l'utilise, et donc on préfère l'éviter.
"n" seul ne l'ai pas !
Bien sûr. D'ailleurs, Brian est tout-à-fait d'accord avec toi. C'est bien connu.
le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog ,d'ou la necessité d'un pointeur far. Les compilateurs Windows ne se soucis plus de ce détail
Bien sûr. Aucun problème de modèle mémoire en programmation Windows 16 bits. D'ailleurs M. Petzold est un pauvre hère.
il fonctionnent avec la mémoire étendue.
Oui (Windows 3.x). Et comment accède-t-on à cette mémoire, si ce n'est à travers des segments ?
Je t'accorde que le modèle "huge", c'est de la cuisine spécifique aux compilateurs C pour MS-DOS et non portable en dehors, en particulier non portable sous Windows.
Antoine
En 42230a3d$0$808$8fcfb975@news.wanadoo.fr, pat va escriure:
Portable ne signifie pas universellement compatible, mais que l'on
n'utilise pas des fonctions spécifiques à la machine ou de
librairie non public et surtout que les sources soit public.
Voui.
far, par exemple, c'est plutôt spécifique... tout le contraire de portable,
quoi.
De plus, portable, cela signifie aussi que l'on précise les conditions
d'utilisation. Si l'on compile pour le modèle huge, on le précise. Cela
évite aux autres de faire chercher pendant des heures pourquoi cela ne
marche pas chez eux...
Quand au fait que les sources soient publics, c'est une galéjade.
TC2 dans le domaine public
Non.
téléchargement gratuit
Oui. Et avant de pouvoir le charger il y a une notice qui précise les
conditions d'utilisation. Et cette notice ne précise pas que le logiciel a
été versé dans le domaine public, bien au contraire.
Error fclc.c 9: Declaration syntax error
J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est
char far **TabDeTab;
ça passe !
Il y aurait pu eu une fausse manip par là ?
Chez toi, c'est bien possible.
Essayes donc tcc -ms -A votrepro.c, pour voir ce qui se passe.
Je conviens que pour un tableau très grand il faut passer par la
mémoire étendu , les fonctions standard ne sont alors plus
utilisables
En fait, je pense qu'il suffit de retoucher _brk()/_sbrk() pour traiter
correctement les segments huge: TC2.01 considère que deux segments huge
adjacents sont séparés de 0x1000, ce qui n'est pas toujours vrai: on trouve
plus souvent 8 de nos jours...
Une touche ne suffira pas, il faudra probablement appuyer sur la
touche Intro pour obtenir le moindre effet...
getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog
s'arrète bien !
Appuye sur la touche Ç de ton clavier, et rien que sur celle-là. Et
racontes-moi comment se passe l'arrêt de ton programme.
r est inutile.
ah, bon , alors la prochaine écriture se fera au niveau de la
dernière colonne écrite.
Non (sauf si tu as modifié en profondeur _FPUTN, et alors là on ne parle
plus de choses portables, ce ne serait portable que chez toi, et encore).
Mais ça dépend de la machine , il est préférable de mettre les deux
Le jour où tu verras tes impressions gâcher deux fois plus de feuilles parce
qu'elles seront imprimées une ligne sur deux, on dira que cela dépend de la
machine...
et la "rn" c'est bien une écriture portable !
Je n'ai pas dit le contraire. C'est juste que son effet est parfois
différent de l'intention de celui qui l'utilise, et donc on préfère
l'éviter.
"n" seul ne l'ai pas !
Bien sûr. D'ailleurs, Brian est tout-à-fait d'accord avec toi. C'est bien
connu.
le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog
,d'ou la necessité d'un pointeur far.
Les compilateurs Windows ne se soucis plus de ce détail
Bien sûr. Aucun problème de modèle mémoire en programmation Windows 16 bits.
D'ailleurs M. Petzold est un pauvre hère.
il fonctionnent avec la mémoire étendue.
Oui (Windows 3.x). Et comment accède-t-on à cette mémoire, si ce n'est à
travers des segments ?
Je t'accorde que le modèle "huge", c'est de la cuisine spécifique aux
compilateurs C pour MS-DOS et non portable en dehors, en particulier non
portable sous Windows.
Portable ne signifie pas universellement compatible, mais que l'on n'utilise pas des fonctions spécifiques à la machine ou de librairie non public et surtout que les sources soit public.
Voui. far, par exemple, c'est plutôt spécifique... tout le contraire de portable, quoi.
De plus, portable, cela signifie aussi que l'on précise les conditions d'utilisation. Si l'on compile pour le modèle huge, on le précise. Cela évite aux autres de faire chercher pendant des heures pourquoi cela ne marche pas chez eux...
Quand au fait que les sources soient publics, c'est une galéjade.
TC2 dans le domaine public
Non.
téléchargement gratuit
Oui. Et avant de pouvoir le charger il y a une notice qui précise les conditions d'utilisation. Et cette notice ne précise pas que le logiciel a été versé dans le domaine public, bien au contraire.
Error fclc.c 9: Declaration syntax error J'ai pas cette erreur chez moi avec tc2.1
Si c'est ligne 9 c'est char far **TabDeTab; ça passe ! Il y aurait pu eu une fausse manip par là ?
Chez toi, c'est bien possible.
Essayes donc tcc -ms -A votrepro.c, pour voir ce qui se passe.
Je conviens que pour un tableau très grand il faut passer par la mémoire étendu , les fonctions standard ne sont alors plus utilisables
En fait, je pense qu'il suffit de retoucher _brk()/_sbrk() pour traiter correctement les segments huge: TC2.01 considère que deux segments huge adjacents sont séparés de 0x1000, ce qui n'est pas toujours vrai: on trouve plus souvent 8 de nos jours...
Une touche ne suffira pas, il faudra probablement appuyer sur la touche Intro pour obtenir le moindre effet... getchar() fonctionne identiquement sur TC2.0 et TC2.1 et le prog
s'arrète bien !
Appuye sur la touche Ç de ton clavier, et rien que sur celle-là. Et racontes-moi comment se passe l'arrêt de ton programme.
r est inutile. ah, bon , alors la prochaine écriture se fera au niveau de la
dernière colonne écrite.
Non (sauf si tu as modifié en profondeur _FPUTN, et alors là on ne parle plus de choses portables, ce ne serait portable que chez toi, et encore).
Mais ça dépend de la machine , il est préférable de mettre les deux
Le jour où tu verras tes impressions gâcher deux fois plus de feuilles parce qu'elles seront imprimées une ligne sur deux, on dira que cela dépend de la machine...
et la "rn" c'est bien une écriture portable !
Je n'ai pas dit le contraire. C'est juste que son effet est parfois différent de l'intention de celui qui l'utilise, et donc on préfère l'éviter.
"n" seul ne l'ai pas !
Bien sûr. D'ailleurs, Brian est tout-à-fait d'accord avec toi. C'est bien connu.
le modèle "HUGE" permet d'utiliser plus de 64K de data et de prog ,d'ou la necessité d'un pointeur far. Les compilateurs Windows ne se soucis plus de ce détail
Bien sûr. Aucun problème de modèle mémoire en programmation Windows 16 bits. D'ailleurs M. Petzold est un pauvre hère.
il fonctionnent avec la mémoire étendue.
Oui (Windows 3.x). Et comment accède-t-on à cette mémoire, si ce n'est à travers des segments ?
Je t'accorde que le modèle "huge", c'est de la cuisine spécifique aux compilateurs C pour MS-DOS et non portable en dehors, en particulier non portable sous Windows.