bug mon projet C [AIDE] - C - Programmation
Marsh Posté le 14-06-2008 à 15:28:53
Merci le fait de deplacer les ligne
FILE *variable;
en dessous des déclaration des variable ne généré plus de bug.
je reviendrais si j'ai d'autre souci ^^ merci
Marsh Posté le 14-06-2008 à 15:33:29
C'est quoi la raison de ça d'ailleurs? Le compilo veut savoir combien de mémoire allouer avant de commencer le programme? Il s'en sort comment du coups avec l'allocation dynamique ?
Marsh Posté le 14-06-2008 à 15:41:06
nan mais ça c'est une limitation C89. Mais c'est pour faire des compilo plus simple à écrire j'imagine. aujourd'hui en C99 on s'en fiche: tu peux tout mélanger et c'est mieux.
Marsh Posté le 14-06-2008 à 15:42:41
bref: ça compile ou pas, mais si ça compile, ça ne pose aucun problème.
Marsh Posté le 14-06-2008 à 15:43:36
avant l aide apporter par " NazzTazz " ça compiler pas
maintenant si
Marsh Posté le 14-06-2008 à 17:14:09
heux comment on fait pour afficher le caractère "%" dans la console ???
Code :
|
^^
j ai une structure nommé "Tableau" et j aimerais crée un tableau de cet structure
du coup j initialise comme suivant
Code :
|
pour un tableau de taille 20
mais comment faire pour un tableau de taille variable ?
Marsh Posté le 14-06-2008 à 17:26:09
malloc.
Element* t = malloc(n * sizeof *t);
// puis vérifier que t != NULL
Marsh Posté le 14-06-2008 à 18:22:54
T1 je vais jamais m'y faire à ces malloc ... C'est tellement plus simple les truc style Vector de Java/C++/...
Marsh Posté le 14-06-2008 à 19:30:01
darkius a écrit : heux comment on fait pour afficher le caractère "%" dans la console ??? |
Code :
|
esox_ch a écrit : C'est quoi la raison de ça d'ailleurs? Le compilo veut savoir combien de mémoire allouer avant de commencer le programme? Il s'en sort comment du coups avec l'allocation dynamique ? |
Tu peux déclarer des variables ailleurs mais il faut créer un nouveau bloc (en C89) :
Code :
|
Marsh Posté le 14-06-2008 à 23:50:16
esox_ch a écrit : Il s'en sort comment du coups avec l'allocation dynamique ? |
Un compilateur C89 ne sait pas faire d'allocation dynamique
Marsh Posté le 14-06-2008 à 23:54:42
oui oui très bien mon projet est terminer en ce qui pour le code
me manque plus qu un rapport de 4 a 5 page a rédiger ... le plus chiant lol
merci a tous
Marsh Posté le 15-06-2008 à 11:33:57
sligor a écrit : |
ça n'a rien à voir. mixer code et déclaration VS. VLA c'est pas du tout le même problème.
Marsh Posté le 15-06-2008 à 11:37:02
Question :
Comment ça se fait que ces compilo C89 sont encore utilisés? Parce ce que j'ai du programmer un microcontrolleur il y a pas longtemps, et le compilo (fourni par MicroChip, le fabriquant) acceptait pas les déclarations au milieu du code ... Il y a un avantage ou c'est juste eux qui avaient pas envie de se re-écrire le truc?
Marsh Posté le 15-06-2008 à 13:20:14
c'est quoi ton compilateur là ? il me semble que gcc est explicite pour ce genre de trucs
Marsh Posté le 15-06-2008 à 13:32:52
esox_ch a écrit : Question : |
A ma connaissance seul le compilateur de Sun supporte entièrement le C99. Les autres compilateurs le supportent que partiellement.
Donc pour écrire du code portable il faut écrire en C89.
Marsh Posté le 15-06-2008 à 13:47:45
sligor a écrit : |
J'crois que Sun cc ne supporte pas encore entièrement C99, pas plus que gcc ou lcc, mais qu'il s'en approche pas mal (idem pour les deux autres).
Marsh Posté le 15-06-2008 à 13:53:24
On dévie du topic... mais comment ça se fait que les compilo mettent autant de temps à supporter cette nouvelle norme?
Marsh Posté le 15-06-2008 à 14:01:39
sligor a écrit : On dévie du topic... mais comment ça se fait que les compilo mettent autant de temps à supporter cette nouvelle norme? |
Amha, c'est le support des arrays de taille variable qui doit être pénible à implémenter, avec plein de cas tordus.
Ca, en C99, c'est autorisé (et perso, je trouve cette idée dégueux):
Code :
|
Ca veut dire que tu peux allouer un tableau de taille variable à l'execution sur la pile, ce qui est loin d'être une sinécure à traiter, entre les problèmes d'alignement, le fait que ca soit fait à l'execution et pas la compilation, etc.
Edit: et le support étendu des flottants et leurs erreurs associées.
Marsh Posté le 15-06-2008 à 14:03:25
ReplyMarsh Posté le 15-06-2008 à 14:41:42
Elmoricq a écrit : Ouais les VLA c'est une belle connerie je trouve. |
bah c'est du Z: si tu ne comprends pas les limites et gains d'une fonctionnalité, tu te tires dans le pieds. Mais si tu utilises les VLA avec un n bien borné, ça devient intéressant.
Marsh Posté le 15-06-2008 à 15:17:27
dans le genre pas mal non plus.
Code :
|
les VLA, ca appelle pas juste malloca ?
Marsh Posté le 15-06-2008 à 15:22:36
Taz a écrit : |
Certes
Je vois surtout venir les béotiens formés qui pondent du Java/C# (dégueux) à longueur de journée, et qui vont se retrouver à utiliser cette fonctionnalité comme ils se sont habitués à le faire dans leur langage de prédilection (et de manière sale, je parie).
Marsh Posté le 15-06-2008 à 15:25:18
Joel F a écrit : dans le genre pas mal non plus. |
Ca peut. Le problème c'est que ca fait appel à des routines qui sont très machine dépendant, et les effets de bord sont dangereux.
Moi je vois surtout venir les mecs qui vont exploser leur pile sans comprendre.
Marsh Posté le 15-06-2008 à 16:32:23
Gf4x3443 a écrit : |
Ah ça je dit pas le contraire. M'enfin, en attendant, j'ai eu sous les yeux du code indus qui fait exactement ce que j'ai montré.
Ça a l'air de marcher pas mal, mais bon c'est codé par des roxxor du Traitement du signal qui manie le -fstack-size= avec brio donc bon.
Enfin c'est toujours pareil, c'est un outil de plus, reste à enseigner au gens de l'utiliser proprement.
Marsh Posté le 15-06-2008 à 19:35:50
Si je comprend bien le problème serait un peu le même qui arrive en Java & co quand tu commences à fouttre tout et n'importe quoi dans tes vecteurs en te disant que ça vaut pas la peine de créer un objet proprement pour tout stocker? Tu te manges donc des memory heap de partout..?
Marsh Posté le 15-06-2008 à 20:20:39
esox_ch a écrit : Si je comprend bien le problème serait un peu le même qui arrive en Java & co quand tu commences à fouttre tout et n'importe quoi dans tes vecteurs en te disant que ça vaut pas la peine de créer un objet proprement pour tout stocker? Tu te manges donc des memory heap de partout..? |
Il est multi factoriel le problème.
D'un, ca ajoute une notion un peu éloignée du C, à savoir que l'on va pouvoir allouer dynamiquement de gros ensembles sur la pile. Ca pose un problème parce que:
- c'est très facile de faire des erreurs à ce niveau. Un stack overflow a des effets de bords notables, difficile à détecter car très machine dépendant. Exemple, les adresses de retour des fonctions, les paramètres passés aux fonctions... sont dans la pile.
- habitude du langage, au niveau pointeur, difficile à visualiser autrement. Et la encore, on peut prendre de très mauvaises habitudes de prog (et qui ne marchent pas nécessairement, qui plus est, alors que dans d'autres langages, ca peut marcher...).
Exemple qui me vient en tête:
Code :
|
Il suffit que le gusse prennent l'habitude de tout faire "dynamiquement", facon garbage collector/allocation dynamique d'autres langages qui ont leur propre runtime, et ca va sembler valide au mec d'écrire ca. Alors que non.
Si le mec sait ce qu'il fait (genre en TSI, en bioinfo, ...), connait la différence entre un pointeur et un tableau, ok, pas de souci: j'approuve, moi même, je trouve que c'est utile. On peut s'astreindre de faire un appel système pour de l'allocation. On manipule des ensembles de taille variable, pour du calcul, c'est efficace, moins d'overhead à faire des appels systèmes.
La ou ca craint, c'est le développeur C du dimanche, qui a fait 3 semaines de C puis ensuite est passé à Java/C# ou autre, calque les comportements de ce langage au C lorsqu'il doit y revenir, et paf.
Les VLA c'est utile pour qui sait s'en servir. Or, c'est pas à la portée du premier béotien venu qui prétend être développeur C mais n'en fait que depuis 3 semaines. J'en ai vu.
Marsh Posté le 15-06-2008 à 20:27:45
D'accord... Je vois mieux ...
Moi qui vient effectivement de Java (et qui fait du Ruby en ce moment) j'ai un mal de chien à me replonger dans ces questions d'allocation d'espace ... Et vu qu'en ce moment je prépare un examen sur les bases d'assembleur ... bein ça fait mal
Marsh Posté le 14-06-2008 à 15:20:53
Je ne comprend pas les erreur généré et ou le problème qu'il y a quelqu'un pourrai m'aide
svp
Merci pour l'aide apporter