Forum » » Création-Développement » » Les macros et le langage C
Posté : 07-03-2016 11:32
OK merci pour les retours positifs
Je m'attendais à certaines remarques venant des "puristes" (Corto, etc...)
C'est vrai que j'ai balancé mes macros "en vrac" alors qu'elles ne sont pas toutes d'un intérêt identiques
Pour résumer j'y vois 3 usages:
1) Des trucs de debug éventuellement désactivables
A noter que vous pouvez aussi remplacer vos printf de debug par un debugprintf du style
void noopprintf(APTR x,...)
{;} /* sera optimisée à rien à la compil */
#ifdef DEBUGVERSION
#define debugprintf printf
#else
#define debugprintf noopprintf
#endif
2) Améliorer la lisibilité comme les OPENLIB
3) Et surtout et c'est important pour moi éviter les fautes de frappes comme dans mon NLOOP ou AND car facilement une fois sur (disons) 20 je fais un truc comme
for(m=0;m!=large;m++)
for(n=0;n!= haut;m++) copier/coller mal retouché de la ligne précédente
ou alors
if((G->joystick.up) & (G->joystick.left)) <--- conversion bête de la pensée vers l' écriture de "si joystick est haut et gauche"
Ainsi pour moi le "AND" est anglais/logique/binaire et le "et" en langage humain Français plus classique est une condition
ou enfin
a->x=a->x + b->x;
a->y=a->y + b->y;
a->z=a->x + b->z; <-- copier coller mal retouché de la première ligne
>perso j'alterne les fonctions inline, les fonctions tout court et les macros.
Idem
Un intérêt des fonctions non inlinés est que tout les registres y sont dispo (puisque sauvés sur la pile) donc on peut y avoir de dispo un plus grand nombre de variables de type register ==> à privilégier pour le traitement massif de beaucoup de données
>écrire dans un source C du pseudo code 68k qui serait remplacer par les macros correspondantes et ainsi générer du code PPC par exemple.
c'est tout à fait faisable genre #define MOVEQ(src,dst) dst=src; après le pb c'est que la syntaxe est plus 100% identique
MOVEQ #$1,D1 deviendrait MOVEQ(0x1,D1) [D1 serait alors une variable globale register ou mieux un union accessible comme LONG,WORD,etc... ] il faudrait alors préprocesser un peu le source ASM pour ajouter les ( et )
Je suis pas sûr que les perfs seraient dégueux car dans beaucoup de cas ce serait juste des MOVE facilement convertibles en ASM PPC en une instruction
Mais au final je pense que ce truc doit fatalement déjà exister qque part
Alain
Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=2256&forum=14