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

Gde je ovde bag?

[es] :: C/C++ programiranje :: Gde je ovde bag?

[ Pregleda: 2994 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Gde je ovde bag?19.01.2006. u 23:52 - pre 222 meseci
Nisam programer, ali me mnogo zanima sledeće:

U jednoj aplikaciji postoji bag (1), i bag je ispravljen (2). Ali ja nikako da ukapiram gde je tu promena. Sve je isto ali obrnuto napisano.

1)
Code:

if (!IS_DIGITAL(ast->transfercapability)) 
{
    set_actual_gain(p->subs[SUB_REAL].zfd, 0, p->rxgain, p->txgain, p->law); 

else 

    set_actual_gain(p->subs[SUB_REAL].zfd, 0, 0, 0, p->law); 
}   


2)
Code:

if (IS_DIGITAL(ast->transfercapability)) 
{
    set_actual_gain(p->subs[SUB_REAL].zfd, 0, 0, 0, p->law); 
}
else
{
    set_actual_gain(p->subs[SUB_REAL].zfd, 0, p->rxgain, p->txgain, p->law); 
}   
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.178.EUnet.yu.



+9 Profil

icon Re: Gde je ovde bag?20.01.2006. u 14:59 - pre 222 meseci
Zaista ne vidim u čemu bi mogao da bude problem...
ako uzmeš najbanalniji primer...

Code:

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    bool x = true;
    int a = 0, b = 0;
    
    /*
    if(!x){
    a = 5;
    }else{
    b = 5;
    }*/
    
    if(x){
    b = 5;
    }else{
    a = 5;
    }
    
    cout << a << endl << b << endl;
}


Ove dve stvari su potpuno iste. Samo po sebi x, ili u tvom slucaju funkcija IS_DIGITAL, može biti SAMO true ili false i ništa treće pošto vraća bool, ne znam...
neka se javi još neko. Ovo (je!) odnosno deluje tako očigledno.
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Gde je ovde bag?20.01.2006. u 15:50 - pre 222 meseci
Veruj mi, ni ja nisam shvatao ali zaista radi. Pitao sam tipa koji mi je poslao patch gde je tu razlika, a on je rekao da i on ne zna ali da mu je patch poslao programer koji je pisao softver i da zaista radi kad se primeni.

E, sad, ja izmenio tih nekoliko linija, iskompajlirao, i zaista radi!

Inače u pitanju je linux program za manipulisanje sa ISDN pozivima preko ISDN kartice. A problem sa (1) je što ne primenjuje rx/txgain iz konfiguracionog fajla prilikom odlaznih poziva (pa su preglasni u mom slučaju) ali dolazni rade kako treba. Kada primenim (2) i kompajliram, tada primenjuje rx/txgain i prilikom odlaznih i dolaznih poziva pa sve radi kako treba.

I šta ja sad da pomislim. Možda je bag do kompajlera?
 
Odgovor na temu

bojan_bozovic

Član broj: 29028
Poruke: 3292
*.pat-pool.le.sbb.co.yu.

Sajt: angelstudio.org


+392 Profil

icon Re: Gde je ovde bag?20.01.2006. u 15:54 - pre 222 meseci
IS_DIGITAL vraca true ili false kad ne bi trebalo.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.verat.net.



+9 Profil

icon Re: Gde je ovde bag?20.01.2006. u 16:18 - pre 222 meseci
Ok...ali zasto bi to trebalo da ima bilo kakve veze sa onim uslovom koji je van te funckije? Da li je to bool promenljiva ili funkcija koja vraca bool, nema nikakve veze. Dakle, ako je problem u funkciji IS_DIGITAL, ne vidim zasto bi ovo bio patch za ovo...:)
 
Odgovor na temu

bojan_bozovic

Član broj: 29028
Poruke: 3292
*.pat-pool.le.sbb.co.yu.

Sajt: angelstudio.org


+392 Profil

icon Re: Gde je ovde bag?20.01.2006. u 19:27 - pre 222 meseci
Pa identicni su iskazi, i kompajler, ako ih ispravno evaluira dace identican ili ekvivalentan kod. My two cents. Dakle, ovo jedino ako je neki bag u kompajleru (s obzirom da je GNjU i ne cudi me uopste da i bude tako nesto).
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Gde je ovde bag?20.01.2006. u 19:33 - pre 222 meseci
A sta ako je IS_DIGITAL neki (neispravan) makro? Ne bi trebalo, ali...


 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Gde je ovde bag?20.01.2006. u 23:35 - pre 222 meseci
Dobio sam odgovor. IS_DIGITAL jeste makro!

Evo:

The problem results from the way the IS_DIGITAL() macro is defined in
include/asterisk/transcap.h:

#define IS_DIGITAL(cap)\
(cap) & AST_TRANS_CAP_DIGITAL ? 1 : 0

So the expression
!IS_DIGITAL(foo)
expands to
!(foo) & AST_TRANS_CAP_DIGITAL ? 1 : 0
which is equivalent to
( !(foo) ) & AST_TRANS_CAP_DIGITAL ? 1 : 0
while one would like to have
!( (foo) & AST_TRANS_CAP_DIGITAL ? 1 : 0 )

Rewriting the original statement removes the "!" operator and everything
is fine.

The two "if" statements would be equivalent (and both correct) if the
definition in transcap.h followed best practices to avoid problems with
operator precedence and looked like this:

#define IS_DIGITAL(cap)\
((cap) & AST_TRANS_CAP_DIGITAL ? 1 : 0)

Regards,
Mike
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.97.eunet.yu.



+9 Profil

icon Re: Gde je ovde bag?21.01.2006. u 00:34 - pre 222 meseci
Fino...lepo je što si ovo našao i postovao. Može biti od koristi. :)
Možda bih se setio da je makro u pitanju, ali ne tako brzo.
S tim što je logičnije da ovaj patch bude ispravka makroa, a ne granjanja u nekom drugom delu koda.

[Ovu poruku je menjao Goran Arandjelovic dana 21.01.2006. u 01:41 GMT+1]
 
Odgovor na temu

bojan_bozovic

Član broj: 29028
Poruke: 3292
*.pat-pool.le.sbb.co.yu.

Sajt: angelstudio.org


+392 Profil

icon Re: Gde je ovde bag?21.01.2006. u 01:57 - pre 222 meseci
Da ali onda to ne bi bio GNU sors. ;-)
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Gde je ovde bag?21.01.2006. u 12:15 - pre 222 meseci
Jesam li polozio ;) ?
 
Odgovor na temu

[es] :: C/C++ programiranje :: Gde je ovde bag?

[ Pregleda: 2994 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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