/ 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
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Hvorfor warning
Fra : Kurt G


Dato : 25-10-07 09:27

Jeg har lavet nogle funktioner, som er gemt i en #include fil.
Når jeg bruger dem i hovedprogrammet, kommer compileren med warning, f.eks.:
MAGMAIM.C(39): warning c275: expression with possible no effect

Det ser heller ikke ud til, at funktionen bliver kaldt, men hvorfor går den
ikke det?

Compileren er Keil UV3.

Kurt



 
 
Peter Makholm (25-10-2007)
Kommentar
Fra : Peter Makholm


Dato : 25-10-07 09:49

"Kurt G" <kurt_g@guldbaek.net> writes:

> Jeg har lavet nogle funktioner, som er gemt i en #include fil.
> Når jeg bruger dem i hovedprogrammet, kommer compileren med warning, f.eks.:
> MAGMAIM.C(39): warning c275: expression with possible no effect

Er det relevant er funktionerne er "gemt" i en #include-fil?

Hvad er det præcist for en expression der giver dig fejlen? (linje 39
i MGMAIM.C?)

//Makholm

Kurt G (25-10-2007)
Kommentar
Fra : Kurt G


Dato : 25-10-07 10:07

"Peter Makholm" <peter@makholm.net> skrev i en meddelelse
news:87y7drk2a8.fsf@hacking.dk...
> "Kurt G" <kurt_g@guldbaek.net> writes:
>
>> Jeg har lavet nogle funktioner, som er gemt i en #include fil.
>> Når jeg bruger dem i hovedprogrammet, kommer compileren med warning,
>> f.eks.:
>> MAGMAIM.C(39): warning c275: expression with possible no effect
>
> Er det relevant er funktionerne er "gemt" i en #include-fil?
Både og...
Det er fordi det er nogle rutiner, som kun er aktuelle for bestemt hardware.
Det er en slagt biblioteksmodul
>
> Hvad er det præcist for en expression der giver dig fejlen? (linje 39
> i MGMAIM.C?)
LCD_Initiering;
Det er et kald, som skal iniitere et LCD-display.
Jeg har fundet ud af, at hvis jeg laver rutinen om, så den kræver
inputparametre, kommer fejlmeldingen ikke.
Men jeg mener da ikke, at det er et krav, at der er inputparametre til en
funktion/procedure!

Kurt



Peter Makholm (25-10-2007)
Kommentar
Fra : Peter Makholm


Dato : 25-10-07 10:28

"Kurt G" <kurt_g@guldbaek.net> writes:

>>> MAGMAIM.C(39): warning c275: expression with possible no effect
>>
>> Er det relevant er funktionerne er "gemt" i en #include-fil?
> Både og...

Spørgsmålet handlede ikke om hvorvidt det i en generel kontekst var
relevant for dit program, men om hvorvidt det var relevant i forhold
til om du får en warning.

Får du ikke præcis samme warning, hvis du sætter funktionen ind i din
kildetekst?


>> Hvad er det præcist for en expression der giver dig fejlen? (linje 39
>> i MGMAIM.C?)
> LCD_Initiering;
> Det er et kald, som skal iniitere et LCD-display.

Nu er det ikke fordi jeg er speciel stærk i C, men det er ikke et
funktionskald. Du mangler et sæt (tomme) parenteser.

//Makholm

Kent Friis (25-10-2007)
Kommentar
Fra : Kent Friis


Dato : 25-10-07 16:07

Den Thu, 25 Oct 2007 09:27:49 +0000 skrev Peter Makholm:
> "Kurt G" <kurt_g@guldbaek.net> writes:
>
>>> Hvad er det præcist for en expression der giver dig fejlen? (linje 39
>>> i MGMAIM.C?)
>> LCD_Initiering;
>> Det er et kald, som skal iniitere et LCD-display.
>
> Nu er det ikke fordi jeg er speciel stærk i C, men det er ikke et
> funktionskald. Du mangler et sæt (tomme) parenteser.

Helt præcist så er det ikke et kald, men en pointer til en funktion.
Og en pointer eller en anden værdi i sig selv gør ikke noget, udover
at det ofte giver en warning.

Man kan fx også få den warning ved at skrive:

1;
"hej";

Umiddelbart giver det ingen mening at sproget giver lov til den slags,
men når man tænker nærmere over det, er det faktisk det samme man
gør når man har en funktion der returnerer en værdi, men ikke bruger
den, fx:

int add(int a, int b) { return a+b; }
   ...
   add(1,2);

Funktionen evalueres til en værdi (i dette tilfælde 3), som så smides
væk. Tilsvarende evalueres ovenstående (både mine eksempler og din
pointer) til en værdi, som bare smides væk.

Det samme gælder iøvrigt også for x++; der evalueres til den gamle
værdi af x, som så smides væk (når der ikke står y=x++).

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Kent Friis (25-10-2007)
Kommentar
Fra : Kent Friis


Dato : 25-10-07 16:08

Den 25 Oct 2007 15:06:46 GMT skrev Kent Friis:
> Den Thu, 25 Oct 2007 09:27:49 +0000 skrev Peter Makholm:
>> "Kurt G" <kurt_g@guldbaek.net> writes:
>>
>>>> Hvad er det præcist for en expression der giver dig fejlen? (linje 39
>>>> i MGMAIM.C?)
>>> LCD_Initiering;
>>> Det er et kald, som skal iniitere et LCD-display.
>>
>> Nu er det ikke fordi jeg er speciel stærk i C, men det er ikke et
>> funktionskald. Du mangler et sæt (tomme) parenteser.
>
> Helt præcist så er det ikke et kald, men en pointer til en funktion.
> Og en pointer eller en anden værdi i sig selv gør ikke noget, udover
> at det ofte giver en warning.
>
> Man kan fx også få den warning ved at skrive:
>
> 1;
> "hej";
>
> Umiddelbart giver det ingen mening at sproget giver lov til den slags,
> men når man tænker nærmere over det, er det faktisk det samme man
> gør når man har en funktion der returnerer en værdi, men ikke bruger
> den, fx:
>
> int add(int a, int b) { return a+b; }
>    ...
>    add(1,2);
>
> Funktionen evalueres til en værdi (i dette tilfælde 3), som så smides
> væk. Tilsvarende evalueres ovenstående (både mine eksempler og Kurts
> pointer) til en værdi, som bare smides væk.
>
> Det samme gælder iøvrigt også for x++; der evalueres til den gamle
> værdi af x, som så smides væk (når der ikke står y=x++).
>
> Mvh
> Kent


--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Peter Makholm (25-10-2007)
Kommentar
Fra : Peter Makholm


Dato : 25-10-07 17:52

Kent Friis <nospam@nospam.invalid> writes:

>>> LCD_Initiering;
>>> Det er et kald, som skal iniitere et LCD-display.
>>
>> Nu er det ikke fordi jeg er speciel stærk i C, men det er ikke et
>> funktionskald. Du mangler et sæt (tomme) parenteser.
>
> Helt præcist så er det ikke et kald, men en pointer til en funktion.

Det var det jeg tænkte, men det er ikke noget jeg var helt sikker på.

> Umiddelbart giver det ingen mening at sproget giver lov til den slags,
> men når man tænker nærmere over det, er det faktisk det samme man
> gør når man har en funktion der returnerer en værdi, men ikke bruger
> den, fx:
>
> int add(int a, int b) { return a+b; }
>    ...
>    add(1,2);

Det gør sprogets grammatik meget mere enkel at man ikke skal til at
dele op i hvilke udtryk der kan have sidevirkninger og hvilke der ikke
kan have sidevirkninger.

Det er relativt simpelt at se at de første tre ikke har
sidevirkninger, generelt set kan det være svært at afgøre om et
funktionskald har sidevirkninger og hvis vi tillader passende
pointergymnastik kan det være enormt svært at se om 'x++' har
sidevirkninger selvom vi ikke tilgår x senere.

//Makholm

Søg
Reklame
Statistik
Spørgsmål : 177420
Tips : 31962
Nyheder : 719565
Indlæg : 6407871
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste