Že tri dni ne spim

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

Že tri dni ne spim

OdgovorNapisal/-a Kroko » 08 Nov 2017, 20:40

Consts.h
Koda: Izberi vse
#define MAX_PATH 260
namespace aaa
{
  namespace Consts
  {
    static const int FILE_MAXLEN = MAX_PATH;
  }
}


xxxCls.h
Koda: Izberi vse
#include "Consts.h"

namespace aaa
{
  class xxxCls
  {
  public:
    ...
  private:
    ...
    wchar_t filename[Consts::FILE_MAXLEN];
    ...
  }
}


Ali je s tem karkoli narobe?
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 08 Nov 2017, 21:38

Hmm, tudi to ni OK:
Koda: Izberi vse
wchar_t filename[MAX_PATH];


Tole pa je OK:
Koda: Izberi vse
wchar_t filename[260];


To kar se zgodi je, da se v povsem drugem objektu pomešajo naslovi. VS2013 bug? Ali pa sem nekaj povsem spregledal.

Povsem možno, da zgornja koda nima nobene veze z mojim problemom. Sem pa težavo opazil, ko sem implementiral ta nesrečni "filename" in če ga odstranim (ali dam na 260) spet dela vse ok.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 08 Nov 2017, 21:53

VS2017 - še vedno ne dela
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 08 Nov 2017, 22:07

tudi 32/64 bit output nima veze
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 08 Nov 2017, 22:17

Kroko je napisal/-a:tudi 32/64 bit output nima veze


Glede na ta quote sklepam da nimaš sintaks errorja?
Imaš nastavljeno, če ni macroja (ga ne najde), ga evaluira v 0?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 08 Nov 2017, 22:28

Zakaj naj ne bi našel tega makrota? Konstanto "Consts::FILE_MAXLEN" uporabljam še marskje drugje pa ni problemov.

Ni sintaks errorja. Nekateri memberji (iz druge klase) postane NULL. Je pa ta druga klasadefinirana takoj za to. Tako da gre očitno za neko prekrivanje memorije, ki pa ga ne razumem.
GCC tudi prevede brez waninga, nisem pa z GCC še preveril, če dela pravilno.


PS
tudi 64 bitni compiler/linker ne pomaga
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a zanka » 08 Nov 2017, 23:31

Huh, čemu uporabljaš spremenljivko, sicer kot const, za dolžino array. Ne bi bilo pravilneje #define?
Uporabniški avatar
zanka
 
Prispevkov: 2524
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 111 krat
Prejel zahvalo: 241 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 09 Nov 2017, 00:57

Našel vzrok. tilz0R mi je dal za misliti in sem preveril še nekaj stvari. Hvala.

zanka je napisal/-a:Ne bi bilo pravilneje #define?

Ravno peklenski #define je bil kriv za tole. Potrebno bi ga bilo prepovedati z zakonom.

Bom več napisal, ko se malo naspim.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 09 Nov 2017, 08:11

Tule je dopolnjena koda, v kateri se vidi (če veš kaj gledati) kje je bila napaka in zakaj je #define treba prepovedati.
Se mi zdi šolski primer škodlivosti uporabe #defina. Ravno dovolj prikrito, da ni povsem očitno.
Kakorkoli, kar te ne ubije te okrepi. In sedaj sem močnejši.


Consts.h
Koda: Izberi vse
#ifndef MAX_PATH
#define MAX_PATH 4096
#endif

namespace aaa
{
  namespace Consts
  {
    static const int FILE_MAXLEN = MAX_PATH;
  }
}


xxxCls.h
Koda: Izberi vse
#ifdef _WIN32
  #include <windows.h>
#endif
#include "Consts.h"

namespace aaa
{
  class xxxCls
  {
  public:
    ...
  private:
    ...
    wchar_t filename[Consts::FILE_MAXLEN];
    ...
  }
}
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 09 Nov 2017, 09:06

Isto se ti je zgodilo, kot se meni velikokrat. Ko si misliš, mah to zihr ni problem, je ravno to problem :)
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a gumby » 09 Nov 2017, 09:11

Kaj pa je problem, je v windows.h definiran drugačen MAX_PATH?
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2537
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 107 krat
Prejel zahvalo: 593 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 64

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 09 Nov 2017, 09:16

gumby je napisal/-a:Kaj pa je problem, je v windows.h definiran drugačen MAX_PATH?


MAX_PATH is defined as 260 in Windef.h.


Kar pomeni:
1. Z define kot takšnim ni nič narobe
2. Prevajalnik bi te moral obvestiti, da imaš MAX_PATH že deklariran nekje in bi moral vsaj warning (boljše error) izpisat.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a gumby » 09 Nov 2017, 10:01

Saj izpiše warning, če redefiniraš neko vrednost. Tule je pa #ifndef spredaj in je tiho...

Lahko narediš takole:
Koda: Izberi vse
#ifdef MAX_PATH
  #warning MAX_PATH je že definiran
#else
  #define MAX_PATH 4096
#endif

Te bo vsaj opozorilo...
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2537
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 107 krat
Prejel zahvalo: 593 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 64

Re: Že tri dni ne spim

OdgovorNapisal/-a peterp » 09 Nov 2017, 10:04

Koda: Izberi vse
#ifndef MAX_PATH
#define MAX_PATH 4096
#endif
Zame je pa tale del nekaj kar ti lahko prej ali slej da sive lase. Deklariraš nekaj kar sploh ne veš koliko bo dejanska vrednost. Lahko je 4096 kot želiš, lahko je pa manj ali več.

Sicer pa uporabljate neke čudne prevajalnike, ki ne znajo javiti warninga pri redefiniciji makroja ;)

Dodano:
Koda: Izberi vse
#warning MAX_PATH je že definiran
Morda še bolje v določenih primerih (večini?).
Koda: Izberi vse
#error MAX_PATH je že definiran
peterp
 
Prispevkov: 637
Pridružen: 23 Feb 2015, 14:52
Kraj: Maribor
Zahvalil se je: 152 krat
Prejel zahvalo: 100 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 102

Re: Že tri dni ne spim

OdgovorNapisal/-a Proteus » 09 Nov 2017, 11:06

gumby je napisal/-a:Saj izpiše warning, če redefiniraš neko vrednost. Tule je pa #ifndef spredaj in je tiho...

Seveda je tiho, saj to je tudi njegov namen.
Kombinacija #ifndef, #define in #endif se tipično uporablja kot tako imenovani "Include guard" v *.h datotekah, da preprečiš dvojno vključevanje.
Uporabniški avatar
Proteus
 
Prispevkov: 2713
Pridružen: 18 Jan 2015, 01:31
Kraj: Planet Zemlja
Zahvalil se je: 285 krat
Prejel zahvalo: 565 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 102

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 09 Nov 2017, 12:15

Gospodje, poglejte njegov prvi primer.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a igo » 09 Nov 2017, 14:10

Eh, angleščina ...
Definiraš MAXI_POTKA in MAXI_DOLGO in nimaš težav z drugimi programi.

Globalna Windows imena spremenljivk uporabljaš, kjer je to potrebno, sicer delaš s svojimi.
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
igo
 
Prispevkov: 1429
Pridružen: 11 Apr 2015, 13:38
Kraj: Krško
Zahvalil se je: 171 krat
Prejel zahvalo: 349 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 33

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 09 Nov 2017, 14:17

MAXI_POTKA in MAXI_DOLGO, resno? Ni glih programerska praksa.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 09 Nov 2017, 15:07

Ne razumete problema.

Mojo konstanto moram nastaviti na število znakov dovoljenih v imenu datoteke. Na nekaterih OSih je to določeno v definu MAX_PATH. Na drugih OSih lahko da ni določeno. V takih primerih (#ifndef) določim vrednost sam na 4096.
Ker je #define viden samo znotraj modula, kjer je določen pride v tem primeru do zanimive napake. V kodi je definicija filename[260] medtem ko je headerju ponekod (ne zmeraj, odvisno od drugih headerjev) lahko filename[4096].
Preizkusil sem tudi druge prevajalnike, pa noben ne da opozorila.
V C++ se defini ne uporabljajo. Pika. Je skregano z vsemi sodobnimi načeli programiranja.
MAKSI_POTKE pa raje ne bom komentiral.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a Proteus » 09 Nov 2017, 15:19

Še vedno mi ni jasno, zakaj pričakuješ (na kakšni osnovi), da bi moral dobiti opozorilo.
Moje mnenje je, da deluje skladno s pričakovanji.
Uporabniški avatar
Proteus
 
Prispevkov: 2713
Pridružen: 18 Jan 2015, 01:31
Kraj: Planet Zemlja
Zahvalil se je: 285 krat
Prejel zahvalo: 565 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 102

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 09 Nov 2017, 15:25

Ne pričakujem opozorila saj zanj res ni osnove.
Opozoril sem na past, v katero sem se ujel, kjer je zaradi #define enak header različen in odvisen od drugih datotek, od vrstnega reda #include direktiv in celo samega zaporedja prevajanja.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a marko » 09 Nov 2017, 15:27

Dobra fora. Tole mi je pa dalo misliti sedajle - moram malo preveriti svojo kodo.. :)

Nauk zgodbe: sistemskih (bolj znanih) definov se ne sme nastavljati, niti preverjati. V primeru, da niso definirani, bi vsaj dobil error.
Če ti v življenju ne gre in si nesrečen, se spomni na lastnike Renaultov.
marko
 
Prispevkov: 1138
Pridružen: 18 Jan 2015, 02:00
Zahvalil se je: 130 krat
Prejel zahvalo: 148 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 79

Re: Že tri dni ne spim

OdgovorNapisal/-a gumby » 09 Nov 2017, 15:52

Hja... #define v taki obliki ima stranske efekte, ki jih preklinjaš še par dni po tem, ko jih odkriješ (in en teden prej, dokler jih najdeš) :D
Podobna zgodba je z F_CPU na AVR.
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2537
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 107 krat
Prejel zahvalo: 593 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 64

Re: Že tri dni ne spim

OdgovorNapisal/-a marko » 09 Nov 2017, 15:56

Občutek je vseeno dober, ko najdeš težavo.. tudi če si hud :)
Če ti v življenju ne gre in si nesrečen, se spomni na lastnike Renaultov.
marko
 
Prispevkov: 1138
Pridružen: 18 Jan 2015, 02:00
Zahvalil se je: 130 krat
Prejel zahvalo: 148 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 79

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 18 Nov 2018, 22:45

Leto je naokoli in spet tri dni nisem spal :-) No, napako sem tokrat odkril.

Spodnji primer je veliko bolj trivialen od mojega saj sem imel opravka z različnmi moduli (dll-i), sinhronizacijo več niti, pošiljanje sproročil glavni zanki,... Skratka kompleksno do amena.
Ker sem (kot je to navada) iskal na napačnem koncu sem se naučil ogromno low level stvari, ki jih (upam) nikoli ne bom potreboval.

Čeprav takih napak ne delam se včasih človek zatipka. Problematična koda je tole:

Koda: Izberi vse
int size = 100;
for (int i=0; i<size; i++)
{
  double progress = i / size;
  SetProgress(progress);
  ...
}
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a zanka » 18 Nov 2018, 23:05

Si dobival 0 ?
Uporabniški avatar
zanka
 
Prispevkov: 2524
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 111 krat
Prejel zahvalo: 241 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 18 Nov 2018, 23:23

Ja, ampak umetnost je bila ugotoviti, da dobivam 0. Povsem drugje je zaradi tega PostMessage vračal napako ERROR_NOT_ENOUGH_QUOTA. Pa tudi to bi še šlo. Ampak ker glavna nit ni procesirala sporočil sem imel težavo z heap spominom.

Seveda sem pomislil, da nekje povozim heap (dll-i in statično linkanje prinaša svojevrstne heap težave) in da posledično sesujem sporočilno vrsto. No, resnica je bila ravno obratna.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a blasny » 19 Nov 2018, 21:00

Tole?
test.png

Kdaj se splaca kaksen analizator kode laufat.
blasny
 
Prispevkov: 437
Pridružen: 18 Jan 2015, 16:48
Zahvalil se je: 314 krat
Prejel zahvalo: 122 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 15

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 19 Nov 2018, 21:20

Kroko je napisal/-a:Ja, ampak umetnost je bila ugotoviti, da dobivam 0. Povsem drugje je zaradi tega PostMessage vračal napako ERROR_NOT_ENOUGH_QUOTA. Pa tudi to bi še šlo. Ampak ker glavna nit ni procesirala sporočil sem imel težavo z heap spominom.

Seveda sem pomislil, da nekje povozim heap (dll-i in statično linkanje prinaša svojevrstne heap težave) in da posledično sesujem sporočilno vrsto. No, resnica je bila ravno obratna.

Vklopi tam "all warnings", pa boš spal dlje :D
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a VolkD » 19 Nov 2018, 22:12

Ja, ampak potem je tam precej več branja. To tudi vzame čas.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 40272
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 8357 krat
Prejel zahvalo: 4893 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 254

Re: Že tri dni ne spim

OdgovorNapisal/-a blasny » 19 Nov 2018, 22:28

Ce se warninge odpravlja sproti, ni nic vec za brat. Razen ko se novi pojavijo.
blasny
 
Prispevkov: 437
Pridružen: 18 Jan 2015, 16:48
Zahvalil se je: 314 krat
Prejel zahvalo: 122 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 15

Re: Že tri dni ne spim

OdgovorNapisal/-a Kroko » 19 Nov 2018, 23:27

VS2017 - in ne, ni nobenega warninga. vedno vse sproti odpravim.

Pa tudi če bi bil - tale pozabljeni (double) in napaka nimata na prvi pogled nič skupnega. Pa tudi na drugi in tretji pogled ne.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4735
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 676 krat
Prejel zahvalo: 1624 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a gumby » 19 Nov 2018, 23:38

Najprej naredi int / int, nato pretvori v double?
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2537
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 107 krat
Prejel zahvalo: 593 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 64

Re: Že tri dni ne spim

OdgovorNapisal/-a bpavsic » 20 Nov 2018, 10:56

gumby je napisal/-a:Najprej naredi int / int, nato pretvori v double?

Aha.

https://msdn.microsoft.com/en-us/library/ty2ax9z9.aspx

Poglej Example...
My brain has too many windows open.
bpavsic
 
Prispevkov: 676
Pridružen: 22 Jan 2015, 15:46
Kraj: MB / MS
Zahvalil se je: 212 krat
Prejel zahvalo: 220 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 223

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 20 Nov 2018, 10:58

bpavsic je napisal/-a:
gumby je napisal/-a:Najprej naredi int / int, nato pretvori v double?

Aha.

https://msdn.microsoft.com/en-us/library/ty2ax9z9.aspx

Poglej Example...

Kaj hočeš povedat?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Že tri dni ne spim

OdgovorNapisal/-a bpavsic » 20 Nov 2018, 11:01

tilz0R je napisal/-a:
bpavsic je napisal/-a:
gumby je napisal/-a:Najprej naredi int / int, nato pretvori v double?

Aha.

https://msdn.microsoft.com/en-us/library/ty2ax9z9.aspx

Poglej Example...

Kaj hočeš povedat?


Koda: Izberi vse
...
         << "10 / 3 is " << (float) z / x << endl;
...
My brain has too many windows open.
bpavsic
 
Prispevkov: 676
Pridružen: 22 Jan 2015, 15:46
Kraj: MB / MS
Zahvalil se je: 212 krat
Prejel zahvalo: 220 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 223

Re: Že tri dni ne spim

OdgovorNapisal/-a tilz0R » 20 Nov 2018, 11:06

gumby je napisal/-a:Najprej naredi int / int, nato pretvori v double?

Jap, zato je rezultat vedno 0.

Koda: Izberi vse
#include <iostream>

int main() {
  double a, b;

  a = 11 / 3;      //3
  b = (double)11 / 3;         //3.6666666666666666666

  std::cout << "11 / 3 = " << 11 / 3 << std::endl;
  std::cout << "(float) 11 / 3 = " << (float) 11 / 3 << std::endl;

  std::cout << "a = " << a << std::endl;
  std::cout << "b = " << b << std::endl;
}


Output:
Koda: Izberi vse
11 / 3 = 3
(float) 11 / 3 = 3.66667
a = 3
b = 3.66667


Ker je imel Kroko oba operanda int, je bil rezultat vedno 0, saj je bil deljenec vedno manjši od delitelja.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1790
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 225 krat
Prejel zahvalo: 474 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 3 gostov