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