CPP vprašanje o prirejanju

Moderator: tilz0R

CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 00:14

Je tale koda :
Koda: Izberi vse
        wcl=wcl+dif;
        if (wcl>=24) wcl=0;
        if (wcl<0) wcl=23;

po funkcionalnosti enaka tej:

Koda: Izberi vse
        wcl=+dif;
        if (wcl>=24) wcl=0;
        if (wcl<0) wcl=23;


???
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a Cloud » 07 Avg 2022, 04:39

Najbolje da oba primera scompilaš in primerjaš kodo v assemblerju
Cloud
 
Prispevkov: 2980
Pridružen: 18 Mar 2015, 09:24
Kraj: Ljubljana
Zahvalil se je: 154 krat
Prejel zahvalo: 374 krat
Uporabnika povabil: BraneZ
Število neizkoriščenih povabil: 23

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a transalp » 07 Avg 2022, 07:02

Namesto "+=" je v drugem izseku kode zapisano "=+" ...
Any sufficiently advanced technology is indistinguishable from magic.
[Arthur C. Clarke]
Uporabniški avatar
transalp
 
Prispevkov: 324
Pridružen: 18 Jan 2015, 11:27
Kraj: Ig
Zahvalil se je: 148 krat
Prejel zahvalo: 101 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 51

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 07:26

Cloud je napisal/-a:Najbolje da oba primera scompilaš in primerjaš kodo v assemblerju
Koda je različna že po dolžini.
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 07:28

transalp je napisal/-a:Namesto "+=" je v drugem izseku kode zapisano "=+" ...
To bo !
Če dam "+=" je pa koda enaka.
Hvala za rešitev zagonetke.
Zanimivo, da prevajalnik ne generira nobenega opozorila ampak gladko prevede. Precej zahrbtna zadeva.
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a GJ » 07 Avg 2022, 11:45

VolkD je napisal/-a:
transalp je napisal/-a:Namesto "+=" je v drugem izseku kode zapisano "=+" ...
To bo !
Če dam "+=" je pa koda enaka.
Hvala za rešitev zagonetke.
Zanimivo, da prevajalnik ne generira nobenega opozorila ampak gladko prevede. Precej zahrbtna zadeva.

Le zakaj bi dal prevajalnik opozorilo?
Znak "+" se v primeru, če stoji pred variablo ali številom vedno smatra kot predznak pozitiven, če pa napišeš "=-" pa se variabla/število za zankom "-" negira.

LP GJ
Če si jezen, si žrtev!
GJ
 
Prispevkov: 524
Pridružen: 18 Jan 2015, 23:26
Kraj: Ljubljana
Zahvalil se je: 252 krat
Prejel zahvalo: 169 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 35

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 11:54

GJ je napisal/-a:Le zakaj bi dal prevajalnik opozorilo?
Že, že,...
Saj je tudi tole:
Koda: Izberi vse
   if (i=0) {
  nekaj
}


Povsem legitimno, a je hkrati zelo pogosta napaka. In prevajalnik seveda da opozorilo.
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a MitjaN » 07 Avg 2022, 12:55

Prevajalnik pač počasi integrirajo funkcionalnosti statičnih analizatorjev. Pred n leti večina prevajalanikov niti trznila ni za primer:
Koda: Izberi vse
if (i=0) {
  nekaj
}

To so ujeli samo statični analizatorji (pc-lint, ...). Sedaj večina prevajalnikov izda opozorilo. Čeprav je to sintaktično popolnoma pravilna koda.

Aktualen primer
Koda: Izberi vse
wcl=+dif;

je tudi sintaktično pravilna koda. Samo prevajalnik ni natreniran, da bi izdal opozorilo.
Poizkusi z (pazi na presledke):
Koda: Izberi vse
wcl =+ dif;

Mogoče bo v tem primeru našel težavo.

Moje pogled na to (in verjamem, da se marsikdo s tem ne bo strinjal) je, da se kodo piše za to, da se jo lažje bere. Tako se izogibam uporabe operatorjev, ki tudi dodeljujejo (assignement operators), ker ima moja glava težave ob ponovnem branju take kode.
MitjaN
 
Prispevkov: 159
Pridružen: 24 Feb 2015, 12:45
Zahvalil se je: 60 krat
Prejel zahvalo: 78 krat
Uporabnika povabil: aly
Število neizkoriščenih povabil: 15

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 13:04

MitjaN je napisal/-a:Poizkusi z (pazi na presledke):
Koda: Izberi vse
wcl =+ dif;

Mogoče bo v tem primeru našel težavo.

Tole sem šel pa takoj preizkusiti. Imam namreč težavo, da za raziko od mnogih, pišem kodo brez teh presledkov, ker se mi presledki zdijo čisto odveč.

Žal presledki niso rešitev. Obnašanje je povsem enako.
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a Sigi » 07 Avg 2022, 13:12

Ali imaš warninge na prevajalniku nastavljene na "all"?
Ker vsaj za prirejanje namesto primejave v if pogoju bi skoraj moral javit opozorilo

edit:
GCC za if(state_timer=19) {... javi opozorilo:
warning: suggest parentheses around assignment used as truth value [-Wparentheses]
Za state_timer =+ 20 ne javi ničesar, ne glede na najvišji nivo opozoril.
Ravno tako ne trzne na state_timer =- variabla

Pa ja, sem videl ta to že veš :oops:
...
Sigi
 
Prispevkov: 477
Pridružen: 23 Jan 2015, 01:57
Kraj: Kamnik
Zahvalil se je: 370 krat
Prejel zahvalo: 287 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 60

Re: CPP vprašanje o prirejanju

OdgovorNapisal/-a VolkD » 07 Avg 2022, 14:15

Ja warning je na all.
Očitno tega nima za napako, na katero je treba biti pozoren. Je pametno vedeti in biti pozoren.
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: 68022
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20945 krat
Prejel zahvalo: 10677 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na C in sorodni jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost