Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data

[es] :: C/C++ programiranje :: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data

[ Pregleda: 4223 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.broadband.blic.net.



+2 Profil

icon Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 29.09.2005. u 21:13 - pre 225 meseci
Napravio sam byte toknizer funkciju koja koristi sledecu strukturu:

Code:

typedef struct BYTE_TOKENIZER
{
  BYTE* datapointer;
  DWORD datalength;
  BYTE* datapointeremainder;
  DWORD datalengthremainder;

} BYTE_TOKENIZER, *LPBYTE_TOKENIZER;


Pokusavam da oduzmem vrednost jednog BYTE pointera od drugog i tu dobivenu vrednost pokusavam da vratim kao DWORD.

datalengthremainder = (datapointeremainder-datapointer); // duzina ostatka

Kompajler pravi upozorenje:
warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data

Logika programa vraca ocekivanu vrijednost i izgleda da nema problema, ali me interesuje kako mogu izbeci upozorenje.

Kako se to moze uraditi a da se kompajler ne zali?




 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 29.09.2005. u 21:28 - pre 225 meseci
Jedino sta ti mogu reci je da si negdje dodjelio 64-bitnu vrijednost 32-bitnoj.
Probaj static_castom ukloniti warning ako je moguce.
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.broadband.blic.net.



+2 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 29.09.2005. u 21:33 - pre 225 meseci
Hvala NrmMyth!


static_cast<DWORD>(...) je rjesio problem.

Ostala mi je navika iz C-a da koristim samo (DWORD), a to se naravno kompajleru nije svidjelo - (warning C4311: 'type cast' : pointer truncation from 'BYTE *' to 'DWORD')







 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
195.252.90.*



Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 29.09.2005. u 22:58 - pre 225 meseci
Compiler te upozorava da ako prevedes source kao 64bit program imaces potencijalnih problema jer je pointer u tom slucaju 64bita, a tvoj program podrazumeva 32bita. Rezultat oduzimanja dva 64bitna broja (ili pointera) je 64bitni broj, a ti si rezultat smestio u 32bitnu varijablu. Potencijalni problem ce se pojaviti u slucaju da je rezultat oduzimanja veci od 32bita.

Castovanjem samo naglasavas kompajleru da znas sta radis i on se nece buniti.

yooyo
 
Odgovor na temu

srdjandakic

Član broj: 11297
Poruke: 430
*.sbb.co.yu.



+14 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 29.09.2005. u 23:31 - pre 225 meseci
Citat:
ljube: Kako se to moze uraditi a da se kompajler ne zali?


#pragma warning(disable : 4244)

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bowneglobal.com.



+6 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 30.09.2005. u 13:30 - pre 225 meseci
Citat:
srdjandakic: #pragma warning(disable : 4244)


Generalno uzev, to je loša ideja, jer ti warningsi često prijave realne potencijalne probleme.
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
81.93.74.*



+2 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 30.09.2005. u 14:18 - pre 225 meseci
Hvala svima na odgovorima.

Siguran sam da vrijednost nikada nece preci 32-bitnu vrijednost, tako da ovo nece predstavljati problem.

Nastojim da iscistim sve upozorenja iz programa.

Kada smo vec kod ove teme, sizeof za BYTE* mi vraca 4 bajta, sto je 32-bitna vrijednost. Zasto mi onda uopste javlja ovaj warnning i kako je dosao do tog '__w64 int'

Mozda priprema za 64-bitni windows?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bowneglobal.com.



+6 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 30.09.2005. u 14:28 - pre 225 meseci
Upravo tako. Uključena ti je opcija /Wp64, što je dobro.

Možeš li da zameniš taj DWORD da bude DWORD_PTR?

Pisao sam malo o tim 64-bitnim začkoljicama ovde:

http://www.novetehnologije.com/Default.aspx?tabid=92
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.broadband.blic.net.



+2 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 30.09.2005. u 21:04 - pre 225 meseci
Hvala. Pokusacu da modifikujem logiku funkcije da koristi DWORD_PTR.
Clanak je odlican, samo me je zabrinuo jer sam shvatio da prosledjujem, preko COM interfejsa, LONG pointere koji su sada 32-bitni a pri prelasku na 64-bitni windows ovo ce biti problem.

Zelja mi je da Activex kontrola radi dobro i sa VB6, pa sam uglavnom koristio LONG za pointere.

Pitanje je da li ce ti VB6 programi uopste raditi na 64-bitnom windowsu...

 
Odgovor na temu

srdjandakic

Član broj: 11297
Poruke: 430
*.sbb.co.yu.



+14 Profil

icon Re: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data 01.10.2005. u 12:46 - pre 225 meseci
Citat:
Dragi Tata: Generalno uzev, to je loša ideja, jer ti warningsi često prijave realne potencijalne probleme.


U pravu si, naročito ovo sa castovanjem...

Ima medjutim nekih warninga koji su totalno nepotrebni, naročito pri warning level 4, pa je zgodno isključiti ih pragmama, pod uslovom da znaš šta radiš.

Npr. deklaracija privatnog copy-konstruktora, obaveštenje o neinlineovanju, windows nameless structs, ...
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako izbeci: warning C4244: '=' : conversion from '__w64 int' to 'DWORD', possible loss of data

[ Pregleda: 4223 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.