Toon posts:

[C++] Macro's

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan je ';' meenemen in je macrodefine?

C++:
1
#define ABC int a(0);


maar die ';' wordt niet meegenomen percies, want die geeft daar een fout op


En een ander vraagje dat ik had, is het mogelijk om een soort van output te zien NADAT de precompiler zijn werk gedaan heeft? Dus met alle inlines vervangen, met alle macro's vervangen etc...

[ Voor 56% gewijzigd door Verwijderd op 19-03-2003 09:20 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-08 16:32
Welke fout krijg je dan ? Volgens mij moet dat wel werken namelijk

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifdef _WINDOWS
  #define _CRTDBG_MAP_ALLOC
  #include <stdlib.h>
  #include <crtdbg.h>

  #define _MEMLEAK_STATES                     _CrtMemState _memleak_begin, _memleak_einde, _memleak_verschil;
  #define _MEMLEAK_CONSTRUCTOR_HEADER ( a )   a ( ) {
  #define _MEMLEAK_BEGIN                        _CrtMemCheckpoint ( &_memleak_begin );
  #define _MEMLEAK_CONSTRUCTOR_FOOTER         };
  #define _MEMLEAK_DESTRUCTOR_HEADER ( a )    ~a ( ) {
  #define _MEMLEAK_EINDE                        _CrtMemCheckpoint ( &_memleak_einde );
  #define _MEMLEAK_DUMPDIFF                     if ( _CrtMemDifference ( &_memleak_verschil, &_memleak_begin, &_memleak_einde ) ) \
                                                  _CrtMemDumpStatistics( &_memleak_verschil );
  #define _MEMLEAK_DESTRUCTOR_FOOTER          };
#else
  #define _MEMLEAK_STATES
  #define _MEMLEAK_CONSTRUCTOR_HEADER ( a )
  #define _MEMLEAK_BEGIN
  #define _MEMLEAK_CONSTRUCTOR_FOOTER
  #define _MEMLEAK_DESTRUCTOR_HEADER ( a )
  #define _MEMLEAK_EINDE
  #define _MEMLEAK_DUMPDIFF
  #define _MEMLEAK_DESTRUCTOR_FOOTER
#endif


C++:
1
2
3
4
  _MEMLEAK_DESTRUCTOR_HEADER (clsNaam)
    _MEMLEAK_EINDE
    _MEMLEAK_DUMPDIFF
  _MEMLEAK_DESTRUCTOR_FOOTER


including.h(438) : error C2143: syntax error : missing ';' before '~'
including.h(438) : error C2501: 'a' : missing storage-class or type specifiers
including.h(438) : error C2523: 'clsNaam::~a' : destructor tag mismatch

[ Voor 6% gewijzigd door Verwijderd op 19-03-2003 09:30 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Je kunt natuurlijk die 8 macros vervangen door een base class. Macro's zijn voor backwards compatiblity met C.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 03:34

GrimaceODespair

eens een tettenman, altijd ...

Probleem zit wsch niet in de macrodefinitie, maar de referentie naar de macro.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
probleem gevonden!
Je ziet hierboven staan:
C++:
1
  #define _MEMLEAK_CONSTRUCTOR_HEADER ( a ) 


Het moet zijn:
C++:
1
  #define _MEMLEAK_CONSTRUCTOR_HEADER(a) 


let op de spaties! ( en ik denken dat spaties van geen belang waren bij C++ )

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Check je preprocessor documentatie. En het is in feite ook geen C++ ;)

De preprocessor doorloopt je source file alvorens hij geparsed wordt. Al die regels beginnend met # zijn preprocessor directives, en belanden dus uiteindelijk niet in de compiler (met uitzondering van #pragma). De reden van die spatie (en het gaat hier alleen om de spatie tussen de macro en het haakje-openen, de rest boeit niet) is omdat het anders niet gezien wordt als een macro-functie, maar gewoon als definitie

als je dit hebt:
C++:
1
#define BLA   (int)23


wil je natuurlijk dat BLA wordt vervangen door letterlijk (int)23, en natuurlijk niet dat het een macro-functie is waarbij 'int' de eerste parameter is. Dus om aan te geven dat het wel een functie moet zijn moet je het haakje-openen direct erna zetten, zodat het haakje wordt meegenomen in de definitie

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1