question sur les free .. - C - Programmation
Marsh Posté le 07-10-2005 à 14:39:37
me semble que oui
chez moi ca compile en tout cas
mais je vois pas trop l'intérêt
Marsh Posté le 07-10-2005 à 15:19:39
Bonjour,
Oui ca marche mais il vaut mieux considerer la 2nde solution comme bonne pour la lisibilite.
La reduction du nombre de lignes de code n'a vraiment aucun interet en programmation.
@+
Marsh Posté le 07-10-2005 à 15:26:50
Rickou a écrit : Bonjour, |
+1
Voire, pour plus de lisibilité :
double *toto = NULL; |
La lisibilité est extrêmement importante en programmation. Il suffit de revenir sur un programme qu'on a écrit soi-même trois mois plus tard pour s'en convaincre, on a du mal à s'y retrouver. Pour peu que ce soit dur à lire, c'est un calvaire. Et si c'est écrit par un autre, on préfèrerait se tirer une balle dans le pied que de décoder l'bazar.
Marsh Posté le 07-10-2005 à 15:31:14
ReplyMarsh Posté le 07-10-2005 à 15:32:29
Ah oui j'avais pas fait gaffe que c'était pour le free().
Ouaip, macro c'est sympa, ou mise à NULL sur la même ligne que le free(), les deux solutions permettant de ne pas dissocier ce qui est en fait une seule action.
Marsh Posté le 07-10-2005 à 16:29:32
Taz a écrit : tu peux aussi te faire une macro zap pour faire le free + NULL |
ouais, alors autant la donner, parce que spontanement on va ecrire un truc genre ca :
Code :
|
alors que ca emmene plein d'emmerde
Code :
|
est d'ja un peu mieux
Marsh Posté le 07-10-2005 à 17:40:18
mais perfectible. et pas qu'un peu
Code :
|
Marsh Posté le 07-10-2005 à 17:45:48
Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre
(et le if (x) est superflu)
Marsh Posté le 07-10-2005 à 17:47:55
Elmoricq a écrit : Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre |
non, aucun rapport
Marsh Posté le 07-10-2005 à 17:48:53
ReplyMarsh Posté le 07-10-2005 à 17:50:03
ReplyMarsh Posté le 07-10-2005 à 17:52:11
Elmoricq a écrit : Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre |
oui c'est de la marne tout ça
Marsh Posté le 07-10-2005 à 17:54:45
chrisbk a écrit : fo deja en tenir une couche pour ecrire ca ca merite la mort lapidation |
Comme je le disais, si on commence à pinailler, on pinaille loin
Marsh Posté le 07-10-2005 à 18:19:16
Taz a écrit : mais perfectible. et pas qu'un peu
|
merci pour vos réponses .. c'est quoi l'interet du do ..while ?
peut on faire :
#define NUKE(X) X ? free(X); (X) = NULL; : ()
genre un truc comme as ?
Marsh Posté le 07-10-2005 à 19:07:29
in_your_phion a écrit : #define NUKE(X) X ? free(X); (X) = NULL; : () |
T'as essayé de compiler ton horreur pour voir ?
Marsh Posté le 07-10-2005 à 20:13:51
in_your_phion a écrit : merci pour vos réponses .. c'est quoi l'interet du do ..while ? |
Ce do-while ne fait rien. Par contre, comme il manque un ';', il force l'utilisateur à le mettre. Ca rend le code plus cohérent.
Citation : peut on faire : |
Après avoir fait le tour de la question, je fais comme ça :
free (p), p = NULL; |
ou éventuellement si on est bien réveillé :
FREE (p); |
avec
#define FREE(p) free(p), (p)=NULL |
avec les précautions d'usage pour que la double évaluation ne pose pas de problèmes...
Marsh Posté le 07-10-2005 à 23:55:34
Code :
|
Marsh Posté le 07-10-2005 à 23:56:38
1/ pkoi les __ ? t'as le scope pour toi
2/ pkoi tu passes en ** ?
Marsh Posté le 08-10-2005 à 10:14:56
t'as le scope pour toi, mais si t'es con comme moi le 1er truc que tu fais c'est utiliser ptr pour le ptr auxilliaire dans la macro, et utiliser ptr dans le code comme petit pointeur pour tester, et la ca merde
Le double c'est plur changer la valeur du pointeur à NULL en pointant sur lui ( en fait il est pas vraiment double, le 1er * c'est parceque tu pointe sur kkchose, et le second parceque le machin que tu pointe sur , c'est un pointeur, mais tu te sers jamais du ** )
Marsh Posté le 08-10-2005 à 11:03:47
0x90 a écrit : t'as le scope pour toi, mais si t'es con comme moi le 1er truc que tu fais c'est utiliser ptr pour le ptr auxilliaire dans la macro, et utiliser ptr dans le code comme petit pointeur pour tester, et la ca merde |
Marsh Posté le 08-10-2005 à 11:19:01
Et la version verbose ?
Spoiler : |
Marsh Posté le 07-10-2005 à 14:33:58
salut,
mettons que j'ai plusieurs types déja alloués, tel que :
est ce que j'ai le droit de faire :
aui lieu de :
après avoir fait un free sur les différents bidules ?
merci par avance