|
| 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 |
| | |
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/
| |
|
|