[C] Local Computation
|
29-08-2014, 19h14
Message : #12
|
|
b0fh
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é 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) { 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; 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. |
|
« Sujet précédent | Sujet suivant »
|
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
|
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)