nom de variables - C - Programmation
Marsh Posté le 02-05-2006 à 17:44:54
Tableaux.
Exemple, avec un tableau à taille fixe :
int values[50]; |
Exemple bis, avec un tableau de taille inconnue à la compilation :
int *values; |
Marsh Posté le 03-05-2006 à 08:51:27
Citation : J'aimerais donc avoir un code du genre: |
C ne permet pas ce genre de choses. Mais ce serait de toutes façons une très mauvaise habitude à prendre. Il faut utiliser des tableaux comme te l'a montré Elmoricq.
Marsh Posté le 03-05-2006 à 20:23:42
Elmoricq a écrit :
|
Je conseillerais tester l'erreur plutôt que la réussite
int *values; |
1) ça permet de gérer immédiatement le pb (si t'as une gros code à mettre après le malloc, ça permet de ne pas gérer l'erreur 800 lignes plus loin
2) ça permet de garder l'indentation minimale (ça t'évite de programmer totalement à droite de ton écran quand t'as 50 malloc à faire et à vérifier)
Marsh Posté le 03-05-2006 à 22:41:40
Sve@r a écrit : 1) ça permet de gérer immédiatement le pb (si t'as une gros code à mettre après le malloc, ça permet de ne pas gérer l'erreur 800 lignes plus loin |
Je comprend ces arguments. Le problème, c'est que cette méthode crée des raccourcis dramatiques (goto cachés) qui font que certaines ressources pourraient très bien ne pas être libérées proprement (sockets, threads etc.)
Donc, je ne fais pas ça et je préfère traiter
Code :
|
même si il faut supporter quelques imbrications...
Code :
|
Evidemment il ne faut pas exagérer, et il faut probablement une fonction de plus si besoin est...
Problème de multiplication des appels de fonctions ? Oui, ça peut arriver (surtout en embarqué, pas assez de mémoire auto...).
Dans ce cas, il faut chercher un compromis acceptable qui fasse que quii qu'il arrive, les ressources soient correctement libérées.
Marsh Posté le 03-05-2006 à 22:51:31
Emmanuel Delahaye a écrit : Je comprend ces arguments. Le problème, c'est que cette méthode crée des raccourcis dramatiques (goto cachés) qui font que certaines ressources pourraient très bien ne pas être libérées proprement (sockets, threads etc.) |
Je comprends pas trop. Sortir d'une fonction avec "return" avant d'avoir atteint la dernière accolade peut faire que ces ressources automatiquement allouées par la fonction ne seront pas libérées ?
Marsh Posté le 03-05-2006 à 23:11:20
Sve@r a écrit : Je comprends pas trop. Sortir d'une fonction avec "return" avant d'avoir atteint la dernière accolade peut faire que ces ressources automatiquement allouées par la fonction ne seront pas libérées ? |
Oui, tout à fait. Disons, que par rapport à l'écriture naturelle, que génère l'imbrication des phases de 'construction', les raccourcis barbares risquent de brûler des étapes de 'déconstruction' naturelles... Exemple typique (pseudo-code):
Voilà ce que j'appelle un algorithme 'naturel' :
Code :
|
La plupart des soi-disantes simplifications de ce genre de code que j'ai vues se traduisent par un fichier non fermé, un appel à fclose() avec un NULL etc.
Marsh Posté le 03-05-2006 à 23:15:23
comme ca par exemple
Code :
|
pour parrer ca on peut aussi faire avec des goto, apres c'est juste une histoire de forme ?
Code :
|
Marsh Posté le 03-05-2006 à 23:26:51
Emmanuel Delahaye a écrit : Oui, tout à fait. Disons, que par rapport à l'écriture naturelle, que génère l'imbrication des phases de 'construction', les raccourcis barbares risquent de brûler des étapes de 'déconstruction' naturelles... Exemple typique (pseudo-code):
|
Délit d'intention. Ma façon d'écrire ce code est toujours ceci :
Code :
|
Tu me rassures. Je croyais que c'était le "return" avant terme qui générait un pb alors que le pb dont tu parles ne vient que de la façon d'écrire du programmeur. Evidemment, ma façon d'écrire mêne à une redondance de code (partout où on libère les ressources). Comme quoi, rien n'est jamais parfait...
Marsh Posté le 03-05-2006 à 23:58:24
Sve@r a écrit : Délit d'intention. Ma façon d'écrire ce code est toujours ceci : |
Ce que je fais en 21 lignes, tu le fais en 34 ? (bon OK, je ne retourne pas l'erreur...) Et il a fallu un effort supplémentaire de raisonnement pour placer les libérations de ressources au bon endroit (dont 3 fois fclose(fp_in) !) etc. Je préfère mon algo 'naturel'... Il induit moins d'erreurs. (Je deviens vieux, j'ai plus trop le temps penser aux details, alors ce qui se fait tout seul ça me va.....)
Marsh Posté le 04-05-2006 à 00:18:42
Emmanuel Delahaye a écrit : Ce que je fais en 21 lignes, tu le fais en 34 ? (bon OK, je ne retourne pas l'erreur...) Et il a fallu un effort supplémentaire de raisonnement pour placer les libérations de ressources au bon endroit (dont 3 fois fclose(fp_in) !) etc. Je préfère mon algo 'naturel'... Il induit moins d'erreurs. (Je deviens vieux, j'ai plus trop le temps penser aux details, alors ce qui se fait tout seul ça me va.....) |
passes au c++, raii et gestion d'erreurs par exceptions te soulageront
Marsh Posté le 04-05-2006 à 01:54:40
Sve@r a écrit : Délit d'intention. Ma façon d'écrire ce code est toujours ceci :
|
Je crois que j'ai un set de macro dans un coin qui gère automatiquement le "défaisage du code", le pb c'est qu'elles nécessites de passer 2x le code dans cpp
( bon ca va hein, j'aime bien jouer à aller trop loin avec le C )
Marsh Posté le 04-05-2006 à 07:10:51
Emmanuel Delahaye a écrit : Ce que je fais en 21 lignes, tu le fais en 34 ? |
Hum... j'ai un malloc en plus...
Emmanuel Delahaye a écrit : Je préfère mon algo 'naturel'... Il induit moins d'erreurs. (Je deviens vieux, j'ai plus trop le temps penser aux details, alors ce qui se fait tout seul ça me va.....) |
L'important c'est de se sentir bien avec sa façon de coder. Et puis, toi tu connais le C donc tu peux prendre les décisions en toute connaissance. Yobbas débute donc il était bon de lui montrer les différentes possibilités (avec des avantages... et des inconvénients pour chacune)
skelter a écrit : passes au c++, raii et gestion d'erreurs par exceptions te soulageront |
Tu devrais consulter son site avant de lui conseiller d'apprendre le C++
Marsh Posté le 02-05-2006 à 17:32:16
Bonjour, je voudrais un petit renseignement, je me doute que c'est juste une question de syntaxe, mais je sèche...
Je voudais créer plusieurs variables (bcp en fait) et déclarer par exemple, var1 = 1, var2 = 2, var3 = 3, etc.
mais comme il y en a bcp, je n'ai pas très envie de taper cinquante fois la déclaration.
J'aimerais donc avoir un code du genre:
for(int i = 0; i < nombre; i++)
int var'valeur_i' = i;
sans utiliser de vecteurs.
Merci d'avance pour votre aide.