nie kompilujący się define

nie kompilujący się define
0

Witam,
Nie kompiluje mi się ten fragment kodu:

Kopiuj
#define ReleaseCOM(x) { if((x)!=NULL) (x)>Release(); (x)=NULL; }

ale jak oleję define'a i dam tak jak niżej to już się kompiluje.

Kopiuj
if(pVBn!= NULL) {pVBn->Release(); pVBn=NULL;}

Błąd jak wywala to:
error C2146: syntax error : missing ';' before identifier '−'
error C2065: '−' : undeclared identifier

edytowany 1x, ostatnio: madmike
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

1.Pokaż jak wywołujesz to define.
2.Spójrz na nawiasy klamrowe w tym defineu - są inaczej ułożone niż w przykładzie.


_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:17 dni
0
Kopiuj
#define ReleaseCOM(x) { if((x)!=NULL) { (x)>Release(); (x)=NULL; } }

Ale tak czy owak zrób lepiej normalną funkcję.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
1

tak swoją drogą jak już robisz tego typu define-y to definiuj je tak:

Kopiuj
#define ReleaseCOM(x)  do { if((x)!=NULL) (x)>Release(); (x)=NULL; } while (false)

inaczej takie coś:

Kopiuj
if (...)
  ReleaseCOM(x);
else
  ...;

spowoduje błąd kompilacji. Posłuchaj @_13th_Dragon. Funkcja będzie lepsza. Kompilator sam poprawi to na wersję inline jak stwierdzi, że się opłaca.


░█░█░█░█░█░█░█░█░█░█░█░

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.