Preprocessing & dereferencing pointer

Preprocessing & dereferencing pointer - C - Programmation

Marsh Posté le 23-02-2010 à 18:26:29    

Bonjour à tous!
 
J'ai une question sur un point qui me pose problème lors de la compilation;
 
J'utilise des macros dans mon code C, dont par exemple:
#define MACRO(var)  (((var)->toto) >> 4) *23      (renvoi un type int)
Cette macro est définie dans une structure, STRUCT;
 
Dans mon code j'ai:
STRUCT* _struct;
rep = MACRO(_struct);
 
Lorsque la structure (comprenant cette macro) est directement dans le fichier .c, la compilation ne pose pas de problème;
En revanche, lorsque j'externalise cette structure dans un fichier .h, j'ai une erreur à la compil : "dereferencing pointer to incomplete type"
 
Et je ne comprends pas pourquoi ... ?????
Des idées ?
 
Merci d'avance

Reply

Marsh Posté le 23-02-2010 à 18:26:29   

Reply

Marsh Posté le 23-02-2010 à 19:25:45    

- l'emplacement où est défini une macro importe peu tant qu'elle est définie avant son utilisation
- pour pouvoir déréférencer un pointeur (appliquer les opérateurs -> ou *), il faut que le type pointé soit complet, donc ne pas avoir uniquement une déclaration mais bien une définition

Code :
  1. struct s; /* declaration de struct s */
  2. struct s {
  3.    int m;
  4. }; /* définition de struct s */


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 13-03-2010 à 04:20:08    

J'avais oublié de mettre la notification e-mail pour ce topic.
 
Merci de ta réponse
 
 
J'ai changé le code des structures, et en effet un "typedef" fait quelques merveilles..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed