Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3186 connectés 

  FORUM HardWare.fr
  Programmation
  C

  #define dans une fonction ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

#define dans une fonction ...

n°1488676
in_your_ph​ion
Posté le 08-12-2006 à 15:41:17  profilanswer
 

...se fesse ?? est-ce utile ou dangereux ?
 
merci par avance  :love:

mood
Publicité
Posté le 08-12-2006 à 15:41:17  profilanswer
 

n°1488690
theshockwa​ve
I work at a firm named Koslow
Posté le 08-12-2006 à 15:56:37  profilanswer
 

ca n'a pas de rapport avec la fonction. Au moment où la fonction est compilée, le #define a déjà été remplacé les directives en # ont déjà été remplacées comme il se doit par le pré-processeur

Message cité 1 fois
Message édité par theshockwave le 08-12-2006 à 15:58:10
n°1488697
Elmoricq
Modérateur
Posté le 08-12-2006 à 16:03:39  profilanswer
 

theshockwave a écrit :

ca n'a pas de rapport avec la fonction. Au moment où la fonction est compilée, le #define a déjà été remplacé les directives en # ont déjà été remplacées comme il se doit par le pré-processeur


 
 
Uniquement pour le code qui suit la directive, celui qui le précède n'est pas affecté :

$ cat v1.c
#include <stdio.h>
 
int main(void)
{
   printf("its teh lolilol : %s\n", TUPEUXPASTEST);
#define TUPEUXPASTEST "bidulotruc"
   printf("ahah ur teh pwned : %s\n", TUPEUXPASTEST);
 
   return 0;
}
$ gcc -W -Wall -O2 -pedantic v1.c
v1.c: In function `main':
v1.c:6: error: `TUPEUXPASTEST' undeclared (first use in this function)
v1.c:6: error: (Each undeclared identifier is reported only once
v1.c:6: error: for each function it appears in.)
 


 
 

$ cat v2.c
#include <stdio.h>
 
int main(void)
{
#define TUPEUXPASTEST "bidulotruc"
   printf("its teh lolilol : %s\n", TUPEUXPASTEST);
   printf("ahah ur teh pwned : %s\n", TUPEUXPASTEST);
 
   return 0;
}
$ gcc -W -Wall -O2 -pedantic v2.c
 


 
 
 
 
 
J'ai déjà utilisé un #define en milieu de fonction, pour définir une macro temporaire.
 
Genre au lieu d'écrire, pour une raison x ou y, un truc genre structure.variable.indice.bidule.chose 10 fois dans une fonction, je tape un truc genre :

#define MACHIN structure.variable.indice.bidule.chose
 
<...utilisation de MACHIN à toutes les sauces ...>
 
#undef MACHIN


 
(l'exemple que je donne ici n'est pas des plus représentatifs, j'ai pas de bon exemple en tête)

n°1488702
in_your_ph​ion
Posté le 08-12-2006 à 16:15:14  profilanswer
 

Elmoricq a écrit :

Uniquement pour le code qui suit la directive, celui qui le précède n'est pas affecté :

$ cat v1.c
#include <stdio.h>

 

int main(void)
{
   printf("its teh lolilol : %s\n", TUPEUXPASTEST);
#define TUPEUXPASTEST "bidulotruc"
   printf("ahah ur teh pwned : %s\n", TUPEUXPASTEST);

 

  return 0;
}
$ gcc -W -Wall -O2 -pedantic v1.c
v1.c: In function `main':
v1.c:6: error: `TUPEUXPASTEST' undeclared (first use in this function)
v1.c:6: error: (Each undeclared identifier is reported only once
v1.c:6: error: for each function it appears in.)

 
 


$ cat v2.c
#include <stdio.h>

 

int main(void)
{
#define TUPEUXPASTEST "bidulotruc"
   printf("its teh lolilol : %s\n", TUPEUXPASTEST);
   printf("ahah ur teh pwned : %s\n", TUPEUXPASTEST);

 

  return 0;
}
$ gcc -W -Wall -O2 -pedantic v2.c

 
   

J'ai déjà utilisé un #define en milieu de fonction, pour définir une macro temporaire.

 

Genre au lieu d'écrire, pour une raison x ou y, un truc genre structure.variable.indice.bidule.chose 10 fois dans une fonction, je tape un truc genre :

#define MACHIN structure.variable.indice.bidule.chose

 

<...utilisation de MACHIN à toutes les sauces ...>

 

#undef MACHIN

 

(l'exemple que je donne ici n'est pas des plus représentatifs, j'ai pas de bon exemple en tête)

 

undef c important ? je veux dire si on l'oublie est ce que notre programme fait comme dans wars et declare la guerre à la Russie en envoyant un missile nucléaire ??


Message édité par in_your_phion le 08-12-2006 à 16:15:53
n°1488706
Elmoricq
Modérateur
Posté le 08-12-2006 à 16:29:21  profilanswer
 

Non, ce n'est pas important. Seulement voila, à partir du moment où tu définis une macro propre à un bloc de code en particulier, en dehors de ce bloc la macro n'a plus lieu d'être.

Message cité 1 fois
Message édité par Elmoricq le 08-12-2006 à 16:29:42
n°1488709
in_your_ph​ion
Posté le 08-12-2006 à 16:32:45  profilanswer
 

Elmoricq a écrit :

Non, ce n'est pas important. Seulement voila, à partir du moment où tu définis une macro propre à un bloc de code en particulier, en dehors de ce bloc la macro n'a plus lieu d'être.


 
ok, merci   [:arg]  :hello:

n°1488735
theshockwa​ve
I work at a firm named Koslow
Posté le 08-12-2006 à 16:54:27  profilanswer
 

Elmoricq a écrit :

Uniquement pour le code qui suit la directive, celui qui le précède n'est pas affecté :

$ cat v1.c
#include <stdio.h>
 
int main(void)
{
   printf("its teh lolilol : %s\n", TUPEUXPASTEST);
#define TUPEUXPASTEST "bidulotruc"
   printf("ahah ur teh pwned : %s\n", TUPEUXPASTEST);
 
   return 0;
}
$ gcc -W -Wall -O2 -pedantic v1.c
v1.c: In function `main':
v1.c:6: error: `TUPEUXPASTEST' undeclared (first use in this function)
v1.c:6: error: (Each undeclared identifier is reported only once
v1.c:6: error: for each function it appears in.)
 




 
ce n'est pas pour autant qu'il y a un rapport avec le fait qu'on soit dans un bloc de fonction. Cette "contrainte" évidente s'applique partout.

n°1488746
Elmoricq
Modérateur
Posté le 08-12-2006 à 17:04:52  profilanswer
 

theshockwave a écrit :

ce n'est pas pour autant qu'il y a un rapport avec le fait qu'on soit dans un bloc de fonction. Cette "contrainte" évidente s'applique partout.


En effet, c'est pour ça d'ailleurs que je ne l'indente pas comme la fonction.
Je voulais plus compléter ton message qu'autre chose. [:dawa]

n°1488939
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2006 à 01:06:19  profilanswer
 

in_your_phion a écrit :

...se fesse ?? est-ce utile ou dangereux ?
 
merci par avance  :love:


Tu peux définir une macro n'importe où (sur une ligne bien à elle quand même).
Elle sera valide jusqu'au prochain #undef de la même macro ou la fin du source.
 
Il m'arrive de définir des macros 'jetables' comme ceci :  

Code :
  1. int f(int a)
  2. {
  3. #define XXX xxx
  4.    reste du code...
  5. #undef XXX
  6. }


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1488943
matafan
Posté le 09-12-2006 à 01:50:16  profilanswer
 

Juste pour dire que #define/#undef ne remet évidemment pas la macro à la valeur qu'elle avait avant de #define (si elle était déja définie).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  #define dans une fonction ...

 

Sujets relatifs
Fonction de decoupage[javascript] Passer des variables à une fonction
Map et pointeur sur fonctionpb fonction opendir() sur serveur distant
[Access] Liste déroulante à partir d'une fonction (syntaxe)[VBA - Excel] - RESOLU - Erreur de focus sur fonction "simple"
[ socket ] Récupérer un autre Buffer de la fonction recv()différence entre fonction et méthode
2 questions: define() et omettre un paramètre sur une fonction perso[javascript] Tester qu'une fonction est défine
Plus de sujets relatifs à : #define dans une fonction ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR