nie kompilujący się define

nie kompilujący się define
  • Rejestracja: dni
  • Ostatnio: dni
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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • 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: dni
  • Ostatnio: dni
0
Kopiuj
#define ReleaseCOM(x) { if((x)!=NULL) { (x)−>Release(); (x)=NULL; } }

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

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
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.