/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Warning i Borlands Gcc 5.5
Fra : Bertel Lund Hansen


Dato : 18-03-02 13:57

Hej alle

Hvordan slår man fra at der kommer en warning her:

   while (r=m%n) { m=n; n=r; }

Den passer på at man ikke glemmer dobbelt =, men hvad så når man
ikke vil have det og gerne vil kompilere uden advarsler?

PS. Det drejer naturligvis om sfd.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

 
 
Kim Hansen (18-03-2002)
Kommentar
Fra : Kim Hansen


Dato : 18-03-02 14:13

Bertel Lund Hansen <nospam@lundhansen.dk> writes:

> Hvordan slår man fra at der kommer en warning her:
>
>    while (r=m%n) { m=n; n=r; }

At indsætte et ekstra sæt paranteser virker såvidt jeg husker i gcc
   while ((r=m%n)) { m=n; n=r; }

--
Kim Hansen

Anders Wegge Jakobse~ (18-03-2002)
Kommentar
Fra : Anders Wegge Jakobse~


Dato : 18-03-02 15:02

"Kim" == Kim Hansen <k@oek.dk> writes:

> Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>> Hvordan slår man fra at der kommer en warning her:
>>
>> while (r=m%n) { m=n; n=r; }

> At indsætte et ekstra sæt paranteser virker såvidt jeg husker i gcc
>    while ((r=m%n)) { m=n; n=r; }

En anden måde er at flytte tildelingen:

while (0 != (m%n)) { /* Jeg er pedandt angående sammenligning med 0 */
r = m%n;
m = n;
n = r;
}

De fleste compilere vil bortoptimere den anden beregning af m%n.

--
/Wegge

Mogens Hansen (18-03-2002)
Kommentar
Fra : Mogens Hansen


Dato : 18-03-02 17:04


"Anders Wegge Jakobsen" <wegge@wegge.dk> wrote in message
news:m2sn6y2cv4.fsf@obelix.wegge.dk...
> "Kim" == Kim Hansen <k@oek.dk> writes:
>
> > Bertel Lund Hansen <nospam@lundhansen.dk> writes:
> >> Hvordan slår man fra at der kommer en warning her:
> >>
> >> while (r=m%n) { m=n; n=r; }
>
> > At indsætte et ekstra sæt paranteser virker såvidt jeg husker i gcc
> > while ((r=m%n)) { m=n; n=r; }
>
> En anden måde er at flytte tildelingen:
>
> while (0 != (m%n)) { /* Jeg er pedandt angående sammenligning med 0 */
> r = m%n;
> m = n;
> n = r;
> }
>

Det er ikke samme kode:

I Bertel Lund Hansen's kode er det sikkert at "0 == r" efter while-løkken.
I din sidste kode er det sikket at "0 != r", hvis løkken har kørt mindst een
gang.

Venlig hilsen

Mogens Hansen



Anders Wegge Jakobse~ (18-03-2002)
Kommentar
Fra : Anders Wegge Jakobse~


Dato : 18-03-02 20:08

"Mogens" == Mogens Hansen <mogens_h@dk-online.dk> writes:

> "Anders Wegge Jakobsen" <wegge@wegge.dk> wrote in message
> news:m2sn6y2cv4.fsf@obelix.wegge.dk...
>> "Kim" == Kim Hansen <k@oek.dk> writes:
>>
>> > Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>> >> Hvordan slår man fra at der kommer en warning her:
>> >>
>> >> while (r=m%n) { m=n; n=r; }
>>
>> > At indsætte et ekstra sæt paranteser virker såvidt jeg husker i gcc
>> > while ((r=m%n)) { m=n; n=r; }
>>
>> En anden måde er at flytte tildelingen:
>>
>> while (0 != (m%n)) { /* Jeg er pedandt angående sammenligning med 0 */
>> r = m%n;
>> m = n;
>> n = r;
>> }
>>

> Det er ikke samme kode:

> I Bertel Lund Hansen's kode er det sikkert at "0 == r" efter while-løkken.
> I din sidste kode er det sikket at "0 != r", hvis løkken har kørt mindst een
> gang.

ØV! Du har ganske ret.

Jeg vender tilbage til postsorteringen, den er heldigvis kodet uden
peer-review.

--
/Wegge

Bertel Lund Hansen (18-03-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-03-02 15:19

Kim Hansen skrev:

>At indsætte et ekstra sæt paranteser virker såvidt jeg husker i gcc
>   while ((r=m%n)) { m=n; n=r; }

Det virker nu ikke i bcc.

Som min gcc er sat op i Windows (standard), kommer der i øvrigt
ikke den slags advarsler.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Anders Bo Rasmussen (18-03-2002)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 18-03-02 15:05

Hedder Borlands compiler også gcc? Hvad står det for?

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Bertel Lund Hansen (18-03-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-03-02 17:14

Anders Bo Rasmussen skrev:

>Hedder Borlands compiler også gcc?

Nej, jeg skrev både bcc og gcc. Jeg har, og bruger, dem begge.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Mogens Hansen (18-03-2002)
Kommentar
Fra : Mogens Hansen


Dato : 18-03-02 17:00


"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote

>
> Hvordan slår man fra at der kommer en warning her:
>
> while (r=m%n) { m=n; n=r; }
>

while (0 != (r=m%n)) { m=n; n=r; }



Venlig hilsen

Mogens Hansen



Bertel Lund Hansen (18-03-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-03-02 17:15

Mogens Hansen skrev:

>> while (r=m%n) { m=n; n=r; }

>while (0 != (r=m%n)) { m=n; n=r; }

Ja, det er jo klart, men jeg mener egentlig ikke at udtrykket er
for kompakt til at blive brugt som det er. Hvad siger du/I til
det?

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Martin Dyring (18-03-2002)
Kommentar
Fra : Martin Dyring


Dato : 18-03-02 17:54

"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
news:ji4c9usepvofsqdgseoc24ja7euipjoqah@sunsite.auc.dk...
> Mogens Hansen skrev:
>
> >> while (r=m%n) { m=n; n=r; }
>
> >while (0 != (r=m%n)) { m=n; n=r; }
>
> Ja, det er jo klart, men jeg mener egentlig ikke at udtrykket er
> for kompakt til at blive brugt som det er. Hvad siger du/I til
> det?

Det er ikke for kompakt til at blive brugt som det er - bcc/gcc _advarer_
dig jo blot om at du muligvis har begået den klassiske fejl at bytte om på =
og == operatorerne.
Personligt undgår jeg den brug du foreslår - det gør koden mindre læselig
for andre. Hvis du endelig skal gøre det, så gør det i det mindste med
paranteser. På den måde er der ingen tvivl om operator præcedensen. :)

--
Mvh,
Martin Dyring



Mogens Hansen (18-03-2002)
Kommentar
Fra : Mogens Hansen


Dato : 18-03-02 18:01


"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote
> Mogens Hansen skrev:
>
> >> while (r=m%n) { m=n; n=r; }
>
> >while (0 != (r=m%n)) { m=n; n=r; }
>
> Ja, det er jo klart, men jeg mener egentlig ikke at udtrykket er
> for kompakt til at blive brugt som det er. Hvad siger du/I til
> det?

Jeg vil nok foretrække det sidste bud, for det er klart at man ikke har
skrevet forkert.
Men det er de små marginaler - måske vil jeg mene noget andet en anden dag

Dog er det væsentligt at man ikke får compiler warnings - men det var jo
også derfor du spurgte.

Venlig hilsen

Mogens Hansen



Byrial Jensen (18-03-2002)
Kommentar
Fra : Byrial Jensen


Dato : 18-03-02 19:14

Bertel Lund Hansen <nospam@lundhansen.dk> skrev:
> Mogens Hansen skrev:
>
>>> while (r=m%n) { m=n; n=r; }
>
>>while (0 != (r=m%n)) { m=n; n=r; }
>
> Ja, det er jo klart, men jeg mener egentlig ikke at udtrykket er
> for kompakt til at blive brugt som det er. Hvad siger du/I til
> det?

Jeg synes det er for kompakt. Jeg foretrækker mellemrum omkring
de fleste operatører og at der ikke skrives mere end én sætning
pr. linje:

while (0 != (r = m % n))
{
m = n;
n = r;
}

Martin Moller Peders~ (18-03-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 18-03-02 18:54

In <pqob9u4a97jricpopqor6o0nskqr8cs9j0@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:

>Hej alle

>Hvordan slår man fra at der kommer en warning her:

>   while (r=m%n) { m=n; n=r; }

>Den passer på at man ikke glemmer dobbelt =, men hvad så når man
>ikke vil have det og gerne vil kompilere uden advarsler?

Hvorfor ikke bare skrive:

while ((r=m%n)!=0) { m=n; n=r; }
Det skulle gerne genere praecis samme maskin-kode, som din linie.

/Martin


Ivan Johansen (18-03-2002)
Kommentar
Fra : Ivan Johansen


Dato : 18-03-02 19:47

Bertel Lund Hansen wrote:

> Hvordan slår man fra at der kommer en warning her:
>
>    while (r=m%n) { m=n; n=r; }
>
> Den passer på at man ikke glemmer dobbelt =, men hvad så når man
> ikke vil have det og gerne vil kompilere uden advarsler?


Du har fra adskillige personer fået forklaret hvordan du kan ændre
koden, så du ikke får en warning. Dette er normalt også den bedste løsning.

Hvis du i stedet ønsket at slå en warning fra, kan du i Borlands
compiler skrive følgende i koden:
#pragma warn -xxx


Det slår den warning fra, der har nummer xxx. Du kan også bruge -w-xxx
som parameter på komandolinien.

Ivan Johansen


Bertel Lund Hansen (19-03-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-03-02 14:53

Ivan Johansen skrev:

>Du har fra adskillige personer fået forklaret hvordan du kan ændre
>koden, så du ikke får en warning.

Ja, og jeg siger tak for svarene. Problemet er blevet bredt
belyst.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste