CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

printf("blabla");

godrik
godrik
Niveau 30
20 mars 2014 à 15:15:42

C'est un classique. C'est pour ce genre de soucis que les gens preferent les constantes aux #define. Il y a tout un tas de regle a respecter pour eviter oes orobkemes de preprocesseur.

Pseudo supprimé
Pseudo supprimé 20 mars 2014 à 19:09:05

Bunyan, je comprends ta frustration :p)

godrik -> Ok ok :o)) Dans la version finale du programme ça sera une variable en fait, car c'est celui qui créera les cartes qui choisiras la taille des maps créées :oui:

C'est vrai que je n'aurais pas eu ce problème avec une constante...

Silvermo
Silvermo
Niveau 26
20 mars 2014 à 19:36:10

https://image.noelshack.com/fichiers/2014/12/1395340563-wxpuhzg.jpg

^^

Battleman-63
Battleman-63
Niveau 12
20 mars 2014 à 20:43:07

Demaine je passe mes TPE de 1ere S. Je stresse à fond :).
C'est sur arduino et un shield Ethernet.

kernel[]
kernel[]
Niveau 10
20 mars 2014 à 20:49:59

bonne chance :noel:

en général ça se passe bien :ok:

Vitinco
Vitinco
Niveau 15
22 mars 2014 à 13:26:51

cout<<"blabla"<<endl; :ok:

printf :malade:

Mais bon tout de même si le C est considéré comme langage de base :(...

Pseudo supprimé
Pseudo supprimé 25 mars 2014 à 03:18:45

Bonsoir !

Je voudrais votre avis sur ma fonction d'allocation de mémoire pour un pointeur de pointeur de char, en C :

http://pastebin.com/MCpy7rm0

Vous la trouvez trop longue ? Je me demande si je ne dois pas le subdiviser en plus petites fonctions.

Merci :-)

Silvermo
Silvermo
Niveau 26
25 mars 2014 à 06:14:07

Ce que je n'aime pas dans ton code c'est que la fonction peut se terminer à plusieurs endroits (plusieurs return, c'est en général signe d'une programmation pas très structurée, enfin de mon opinion perso, j'aime avoir un seul return, ce qui est la preuve que quoi qu'il arrive on atteind bien un certain point de la fonction)
le "continue" ne me plait pas non plus :hap: (j'aime pas les break ou continue comme ça qui donnent l'impression qu'on ne sait pas comment structurer les choses)

TU pourrais changer ton :

" if((mapData[x] = malloc(YSIZE * sizeof(**mapData))) != NULL)
{
continue;
}
else
{"

en :

" if((mapData[x] = malloc(YSIZE * sizeof(**mapData))) == NULL)
{
"

ce qui exprime la même chose je crois

Mjonir
Mjonir
Niveau 26
25 mars 2014 à 09:17:09

Une complexité cyclomatique de 6 c'est raisonnable, une imbrication de 6 c'est limite. Moi la structure ne me gêne pas, mais je n'aime pas reporter la gestion d'erreur 3km plus loin en imbriquant le tout. Un bon (ou mauvais?) exemple de ce qu'on risque avec ça, c'est le premier code sur cette page:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776913(v=vs.85).aspx

Je trouve ça beaucoup plus compréhensible d'avoir une gestion d'erreur localisée et d'avorter l'exécution de la fonction.

Silvermo
Silvermo
Niveau 26
25 mars 2014 à 09:54:18

Mouais, je n'aime pas trop les codes avec des tonnes de boucles imbriquées et quelques return, continue, break dans certaines conditions... y a rien de pire à tester, et à maintenir....

Pseudo supprimé
Pseudo supprimé 25 mars 2014 à 18:28:42

Silvermo, comment ferais tu sans mettre plusieurs return ? Car le but est de pouvoir vérifier extérieurement si il y a eu une erreur ou pas :oui: J'ai donc besoin d'avoir soit NULL, soit mapData.

Par contre je suis d'accord avec toi sur le continue, j'avais écrit comme tu le met "== NULL", j'ai juste voulu tester autre chose, histoire de voir si c'est plus clair à la relecture ou pas.

Mjonir, merci, je vais regarder ton lien :-)

Mjonir
Mjonir
Niveau 26
25 mars 2014 à 18:46:31

VampireGirl -> Non mais les détails du lien on s'en fout (enfin, sauf si le sujet t'intéresse, mais c'pas la question). Ce qui est effrayant sur cette page, c'est le premier exemple de code ^^'

Bunyan
Bunyan
Niveau 17
25 mars 2014 à 19:16:58

Perso, j'aurai plutôt tendance à faire ça :
http://pastebin.com/pFBdXTGt (je vais arrêter, c'est la 4ème version que je minimise...)
Et encore, je sortirai toute la libération de mapData en fonction, mais vu que je n'ai pas fait de C depuis 3 ans et que j'ai la flemme de chercher la syntaxe des paramètres...

Je ne saisis pas pourquoi tu contrôles si x est positif. D'ailleurs, en y regardant de près, si x vaut une valeur négative... tu devrais avoir une segfault (ou équivalent), non ? Vu que tu tenterai d'accéder à une case à indice négatif dans le "else" de la libération.
A minima, le else fait une partie du if et les 3 dernières instructions "free + mapData = NULL + return NULL" peuvent être sorties du bloc if/else et misent à la suite vu qu'exécuter dans tout les cas.

Pseudo supprimé
Pseudo supprimé 25 mars 2014 à 19:33:23

Bunyan -> Je controle si x est strictement supérieur à 0, car si le pointeur numéro 0 a posé problème, faire : x-- poseras problème car là j'effectuerai des opérations sur un pointeur qui n'existe pas :o))

Je vais regarder ton code :o))

Mjonir, j'avoue c'est long et dur à lire, je ne veux pas faire ce genre de code justement :/

Pseudo supprimé
Pseudo supprimé 25 mars 2014 à 19:38:01

Merci, je viens de voir grâce à toi une bonne façon pour supprimer tous ces return :oui Je n'avais pas pensé à ça :o))

Bunyan
Bunyan
Niveau 17
25 mars 2014 à 19:38:10

Vrai, j'avais zappé ce point, honte sur moi x)

Dans ce cas-là, je corrige :
http://pastebin.com/kte0tD8Z

Silvermo
Silvermo
Niveau 26
25 mars 2014 à 22:13:36

VampireGirl : tu vois que les return peuvent être réduits au nombre minimum (best practice ^^ )

Bunyan
Bunyan
Niveau 17
25 mars 2014 à 22:22:58

Ca, ça dépend des cas.

Typiquement, sur des contrôles lourd ou des méthodes longues difficilement découpables, il vaut mieux utiliser les return dès le contrôle (soit proche du début) et faire "deux points" de sortie (entre guillemets car l'idée ici est plus "endroit de sortie" que "point" au sens strict du terme).

La lisibilité en pâti sinon clairement : se trimbaler un code erreur ou encapsuler chaque action dans un bloc "if".

Généralement, il vaut mieux tenter de les réduire, histoire que le flux soit plus facile à voir et contrôler, malheureusement, ce n'est pas possible tout le temps. Ici, clairement, la fonction est courte et facilement factorisable, de même que les comportements.

Pseudo supprimé
Pseudo supprimé 25 mars 2014 à 22:23:34

Oui à fond, ici je suis occupée à réécrire mes autres fonctions. Vous me conseillez de manière générale de toujours avoir un seul return ?

Car par exemple j'avais cette fonction qui ferme un fichier :

http://pastebin.com/3MfiTH0u

Du coup j'ai réécrit la même comme ça :

http://pastebin.com/2SYcF17W

Bunyan
Bunyan
Niveau 17
25 mars 2014 à 22:55:42

Pour le C, vu que c'est typique de faire des affectation en tant que condition, je serai prudent.

Le principal est la lisibilité. Du moment que c'est facile à lire et ne prête pas à confusion : oui.
Si ça complexifie le code, ou le rend plus compliqué à comprendre "facilement", alors non...

Le problème étant que c'est entièrement subjectif.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment