Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 24 894 097

  • Nb. de membres 186
  • Nb. d'articles 1 269
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Les macros et le langage C

Les macros et le langage C#2256

10Contributeur(s)
thellierK-LSharynnCrisotcortoElwoodsinisrusastrofra
3 Modérateur(s)
K-LElwoodcorto
icon_post
@Corto

Je voulais dire é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.
genre #DEFINE RTS return 0; etc

Kamelito

[addsig]
Crisot Crisoticon_post
Kamelito.

Sur le papier c'est pas irréalisable, mais niveau performances j'y vois aucune viabilité (je parle pas d'un truc "un peu lent", mais bien d'un truc inutilisable).

Traduire des instructions assembleur conçue pour être exécutée en 1 cycle par du C qui va être compilé en un truc ultra long...
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet
astrofra astrofraicon_post
J'utilise pas mal les macro, essentiellement pour de petites taches, mais effectivement les macros c'est pas le paradis non plus :)
- pas de contrôle de type par le compilateur
- si on passe une expression complexe en param elle risque d'être évaluée plusieurs fois
- quand on a une erreur de compil dans un appel à grosses macros imbriquées ce n'est pas toujours évident de retrouver la ligne fautive dans le code source

Les templates sont censés corriger ces travers mais la discussion concernait les projets en C :)

Sinon ouais, perso j'alterne les fonctions inline, les fonctions tout court et les macros.
L'idéal serait d'aller inspecter l'ASM génèré mais je ne le fais pas :))
A1200 en Rack 1U custom | Pas de machine NG.
fra.planet-d.net
corto cortoicon_post
@kamelito Désolé mais ça me para?t très alambiqué et donc peu efficace ...

@astrofra Inspecter l'asm est très instructif. Après, pour tenter de voir si le code généré est efficace ... à réserver aux dernières extrémités.

thellier thelliericon_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
icon_post
@Thelier

>Mais au final je pense que ce truc doit fatalement déjà exister qque part

Je me suis aussi dit cela mais je n'ai encore rien trouvé, peut-être pour le 6502 avec CC65.

Kamelito [addsig]
icon_post
Bonjour, effectivement les macros ne font que faciliter la vie des programmeurs. Ce vous avez donné là est très intéressant et simplifie de plus en plus la vie en programmation. Où est ce que vous avez pu apprendre tout ceci ? Parce que moi je suis encore en phase d'apprentissage et je ne disposais pas encore ces informations complètes sur le C. Sinon, en suivant des cours C et des tutoriels C sur internet, j'ai pu comprendre à quel point les macros étaient importants pour réussir en programmation. Apprendre C'est l'une de mes passions mais pouvez-vous me dire quels sont les vrais avantages si l'on maitrise à merveille la programmation. En fait, je déjà lu dans certains forum et sur des sites internet que maitriser la programmation permet de maitriser le développement d'application et de logiciel. Moi j'apprends C sur http://c.developpez.com/cours/
sinisrus sinisrusicon_post
@M!onkey!

Tu pourrrais créer un nouveau poste et faire une présentation?
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme