RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Macro et define : le préprocesseur

Forum : C & C++
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ C & C++

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET BLOQUER
APPARTENANCE A LA FAQ APPARTENANT A LA FAQ


POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C & C++

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1470
Message
#164137
Posté le 24/06/09 à 14:34
Macro et define : les directives de préprocesseur

FAQ MP dit :

Préambule:
Wikipedia dit :
En informatique, un préprocesseur est un programme qui procède à des transformations sur un code source, avant l'étape de compilation ou d'interprétation proprement dite.


define:

Les define permettent de mettre en place une nouvelle forme de constante dans vos programmes. Il existe comme vous le savez le mot-clé const
afin de rendre une variable constante (c'est à dire avec une valeur fixé et inchangeable). Seulement, l'utilisation de cette méthode requiert la création d'une nouvelle variable comme par exemple


const int SIZE = 10; //ou const std::string NAME = "Moteurprog";


Ceci n'est pas très grave mais une utilisation mémoire est donc utilisée dans un cas comme celui-ci!

Il existe une alternative avec des avantages mais aussi des inconvénients qu'il est bon de connaitre tout de même : la directive #define

la syntaxe est ma suivante:

#define SIZE 10 #define NAME Moteurprog #define PI 3.14


c'est donc de la forme #defineespacenom de la constanteespacevaleur de la constante

La différence avec le mot clé const c'est que cette méthode consiste à remplacer la constante dans le code par la valeur précisée. Par exemple
si on a ce code là :


#include <iostream> #define LOOP 10 int main( void ) { int i=0; for(i = 0; i < LOOP; ++i) std::cout<<i<<std::endl; std::cout<<"Nombre de tours demandes: "<<LOOP<<std::endl; system("pause"); return 0; }


après un traitement du préprocesseur, le code qui sera compilé ainsi:


#include <iostream> int main( void ) { int i=0; for(i = 0; i < 10; ++i) std::cout<<i<<std::endl; std::cout<<"Nombre de tours demandes: "<<10<<std::endl; system("pause"); return 0; }


Comme vous pouvez le voir, chaque itération du mot LOOP a été transformée par la valeur fournie (ici 10)!

avantages:
* pas d'utilisation mémoire
* rapidité pour voir les constantes parmi les directives du préprocesseur

inconvénient:
* les valeurs ne sont pas typées ce qui peut engendrer des erreurs (on peut très bien mettre #define SIZE 10 comme #define SIZE Moteurprog
ce qui ne collerait pas avec le type de donné attendu)


Remarques:
* Souvent, comme toutes les constantes de manière générale, le nom des #define se met en majuscules
* Les #define se mettent en général dans les headers pour plus de clarté

Macro:

Le fonctionnement des macro est très similaire aux constantes #define et utilise lui aussi la commande #define
Je pense que le plus simple pour illustrer cette méthode est des exemples, donc en voici:


#include <iostream> //Macro simple #define HELLO() std::cout<<"coucou!"<<std::endl; #define BYEBYE() std::cout<<"Je pars, ciao!"<<std::endl; #define PAUSE() system("pause"); #define HISTOIRE() std::cout<<"toto est un gentil"<<std::endl; std::cout<<"garcon malgre son age"<<std::endl; //Macro avec argument #define DRAW(text) std::cout<<text<<std::endl; #define ADD(value1, value2) std::cout<<value1+value2<<std::endl; int main( void ) { HELLO() //affiche "coucou" HISTOIRE() //affiche l'histoire de toto DRAW("Maintenant je vais faire un calcul!") //affiche "maintenant je vais faire un calcul!" ADD(2,5) //affiche 7 PAUSE() //fais une pause return 0; }


Le principe est le même: le préprocesseur remplace les occurrences par les lignes de commandes définies par la macro

avantages:
* ça peut être pratique pour certaines courtes fonctions appelées très couramment
* les macros se repèrent facilement dans le code

inconvénients:
* les arguments ne sont pas typés
* les macros les plus longues ne sont pas très claires

remarques:
* tout comme les constantes, les macros ont généralement un nom en majuscules
* il ne faut pas oublier le '' en fin de ligne pour une macro sur plusieurs lignes

Voila, vous savez tout les amis, j'espère avoir été clair, ciao Smiley

__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE


    PAGE : [1]



.: Site Web développé par Yann Pingot et l'équipe MPWG avec www.evolvia-web.com :.