• STATISTIQUES
  • Il y a eu un total de 0 membres et 34804 visiteurs sur le site dans les dernières 24h pour un total de 34 804 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [FR] Root-Me
    Notre équipe se base sur un constat : à l'heure actuelle ou l'information tend à devenir...
    Hacking
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Local Computation
29-08-2014, 19h14
Message : #12
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [C] Local Computation
Je crois qu'on n'a pas les mêmes critères de lisibilité Smile Ce type de gadget peut dysfonctionner de manière subtile et non-intuitive (je me demande combien ici ont vraiment testé ce code...) par exemple:

Code C :
for(lim = 1; lim < 10; ++lim) {
      printf(fibonacci(lim));
   }


ne marchera pas, parce que lim est modifié pendant le contenu de l'appel a fibonacci, un comportement contre-intuitif car impossible avec une fonction classique.

En supposant qu'on corrige la macro pour éviter ça, en faisant une copie de l avant exécution,

Code :
int lim = 1;
while(lim < 10) {
    printf("...", fibonacci(lim++))
}

serait également sémantiquement équivalent à la première boucle si fibonacci était une fonction classique, mais peut donner un truc différent suivant l'implémentation de la macro, si l'argument est évalué plusieurs fois.

De manière générale, les macros en C sont dangereuses et contre-intuitives, sauf si on respecte les contraintes suivantes, plutôt contraignantes:

- parenthèses autour de l'expression top-level
- parenthèses autour de tous les arguments
- évaluation de chaque argument une et une seule fois (et donc pas de boucles avec un argument dans le corps, ou de branches if/else avec un nombre d'appels différents aux arguments dans chaque branche)

Il y a des limitations supplémentaires: comportement bizarre en cas de shadowing, ou d'aliasing de plusieurs arguments, impossibilité de prendre un pointeur vers la fonction...

Les macros sont une relique d'une décennie antérieure. Il n'y en a pas dans les langages modernes. Même C++ s'en était déja largement débarassé au profit d'une alternative type-safe, les templates. Les compilos modernes savent inliner les fonctions courtes.

Conclusion: chaque fois que vous utilisez une macro la ou une alternative existe, Dieu tue un chaton ! alors soyez gentils avec les chatons.
+1 (3) -1 (0) Répondre


Messages dans ce sujet
[C] Local Computation - par octarin - 21-08-2014, 17h18
RE: [C] Local Computation - par ark - 22-08-2014, 09h54
RE: [C] Local Computation - par Junky - 22-08-2014, 10h05
RE: [C] Local Computation - par notfound - 22-08-2014, 10h25
RE: [C] Local Computation - par Junky - 22-08-2014, 10h40
RE: [C] Local Computation - par ark - 22-08-2014, 10h48
RE: [C] Local Computation - par notfound - 22-08-2014, 11h17
RE: [C] Local Computation - par Junky - 22-08-2014, 11h23
RE: [C] Local Computation - par notfound - 22-08-2014, 11h40
RE: [C] Local Computation - par ark - 22-08-2014, 12h04
RE: [C] Local Computation - par eax64 - 29-08-2014, 18h27
RE: [C] Local Computation - par b0fh - 29-08-2014, 19h14

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut