website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Les macros et le langage C


Posté : 07-03-2016 11:32 icone du post

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



Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig

Message édité par : thellier / 07-03-2016 11:33
Message édité par : thellier / 07-03-2016 11:36
Message édité par : thellier / 07-03-2016 11:37

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