[C++ Warning] : W8060 Possibly incorrect ass

0

Hej!
Podczas kompilacji kodu pokazuje mi sie ostrzezenie

[C++ Warning] mainfrm.cpp(152): W8060 Possibly incorrect assignment

Kod

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
   {
	  osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
		return true;
   }

Co tutaj jest nie tak?

0

podczas ktoregos podstawienia typy zmiennych niecalkiem sa dopasowane:

bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);

http://msdn2.microsoft.com/en-us/library/ms724451.aspx

GetVersionInfo zwraca BOOL, sprawdz czy zmienna bOsVersionInfoEx jest tego typu. BOOL moze byc czyms innym niz bool

dwOSVersionInfoSize jest typu DWORD. sizeof() moze zwracac unsigned long albo size_t. to tez moze byc cos innego niz DWORD

najprosciej to pewnie obejdziesz przez rzutowania np (DWORD)sizeof(..

0

quetzalcoatl_ - Nie o to akurat w tym Warningu chodzi.
Masz przypisanie w instrukcjii warunkowej "if", co rzadko się zdarza (ale nieraz się zdarza).
Kompilator myśli że może popełniłeś błąd, i zamiast przypisania powinieneś zrobić porównanie:

if( !(bOsVersionInfoEx == GetVersionEx ((OSVERSIONINFO *) &osvi)) )

Czyli zamiast operatora porównania "==" walnołeś "=", czyli operator przypisania.

P.S: Takie tematy to do Newbie

0
JaskMar napisał(a)

quetzalcoatl_ - Nie o to akurat w tym Warningu chodzi.
Masz przypisanie w instrukcjii warunkowej "if", co rzadko się zdarza (ale nieraz się zdarza).
Kompilator myśli że może popełniłeś błąd, i zamiast przypisania powinieneś zrobić porównanie:

if( !(bOsVersionInfoEx == GetVersionEx ((OSVERSIONINFO *) &osvi)) )

Czyli zamiast operatora porównania "==" walnołeś "=", czyli operator przypisania.

P.S: Takie tematy to do Newbie

Wiem, że operator == to porównanie, a = to przypisanie.
Ale operator = BYŁ podany w tym przykładzie w examples w dokumentacji WINDOWS API
Czyżby w MS sie pomylili ?

0

JaskMar - wierze, bo nie widzialem tego bledu nigdy u siebie. wiecznie z podobnych konstrukcji korzystam jak tylko funkcja ma standardowe zero-non-zero error notification.. co to jest za kompilator?? jajo bym zniosl jakby mi kompilator tego sie czepial :)

LOSMARCELOS - to jest WARNING to nie jest blad. kompilacja przebiegla poprawnie. kompilator po prostu daje Ci znac ze ta linijka mu wyglada "dziwnie" i kaze Ci sprawdzic czy na pewno jest ok

0

Kompilator to Borland Turbo C++, aplikacja okienkowa (z wykorzystaniem VCL)

0
LOSMARCELOS napisał(a)

Czyżby w MS sie pomylili ?

Nie, nie pomylił się. To jest tylko ostrzeżenie, a nie błąd. Jak już pisałem - porównanie w if'ie się zdarza. I w owym przykładzie zapewne taka potrzeba była. A Ty nie powinieneś "odgapiać" od dokumentacji, tylko myśleć sam. Także pomyśl - chcesz porównać, czy przypisać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1