| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | moralsk støtte Fra : Troels Thomsen | 
  Dato :  22-11-04 17:00 |  
  |   
            
 Er dette ikke standard c, der burde virke på alle ædruelige
 implementationer, incl embedded
 
 unsigned int a = 100;
 unsigned char b;
 b = a +1; // compliant c , ikke ? Dog oftest med warning
 b = (unsigned char)(a +1); // præcist det samme som ovenstående ?
 void someFunction( unsigned char asdf);
 asdf (a+1) // stadig compliant c, asdf kaldes med værdien 101
 
 Hvis jeg har ret, hvad vil argumentet så være, formuleret i mere officielle
 termer?
 
 Hvis jeg skulle forsøge vha L (left - location) og R (right - are)
 begreberne, mener jeg jo at det er kompilerens opgave at få værdien (are)
 ind i den angivede variabel (location). Og det må den så gøre med passende
 viden om endianess, signed representation, etc.
 
 Kan det gå galt ?
 (ud over hvis kompileren er defekt)
 
 tpt
 
 
  
            
             |   |   
            
        
 
            
         
           Niels Dybdahl (23-11-2004) 
         
	
            | Kommentar Fra : Niels Dybdahl | 
  Dato :  23-11-04 09:41 |  
  |   
            > unsigned int a = 100;
 > unsigned char b;
 > b = a +1; // compliant c , ikke ? Dog oftest med warning
 
 Jeg er ikke sikker på at "//" til kommentarer er med i gamle C standarder.
 
 > b = (unsigned char)(a +1); // præcist det samme som ovenstående ?
 > void someFunction( unsigned char asdf);
 
 Funktionsprototyper er vist heller ikke med i gamle C-standarder. Jeg har
 hørt at det er noget som er blevet hugget fra C++.
 Desuden må funktionsprototyper vist ikke stå midt i anden kode.
 
 > asdf (a+1) // stadig compliant c, asdf kaldes med værdien 101
 
 Niels Dybdahl
 
 
  
            
             |   |   
            
        
 
            
         
           Troels Thomsen (23-11-2004) 
         
	
            | Kommentar Fra : Troels Thomsen | 
  Dato :  23-11-04 11:09 |  
  |   
            
 
 Jeg gjorde sådan:
 b = a +1;
 og blev irettesat af en "c expert" at jeg skulle gøre sådan
 b = (unsigned char)(a +1);
 for at det var korrekt c.
 
 ???
 
 
  
            
             |   |   
            
        
 
            
         
            Brian Schelde (23-11-2004) 
         
	
            | Kommentar Fra : Brian Schelde | 
  Dato :  23-11-04 11:48 |  
  |   
            "Troels Thomsen" <troels.thomsen@mailteledk> wrote in message
 news:41a30c60$0$287$edfadb0f@dread11.news.tele.dk...
 > Jeg gjorde sådan:
 > b = a +1;
 > og blev irettesat af en "c expert" at jeg skulle gøre sådan
 > b = (unsigned char)(a +1);
 > for at det var korrekt c.
 Han har på sin vis også ret, da man i det første tilfælde ofte får en
 warning (alt efter hvordan ens compiler er configureret). De fleste vil
 gerne helt undgå at have warnings i deres programmer da en warning ofte
 fortæller at der er et eller andet der ikke er tænkt over i koden.
 
 Når du signer den fortæller du compileren at du godt ved at det tal du vil
 lægge i variablen b kan være for stort ved at caste den til samme type som b
 variablen og du får derfor ikke en warning.
 
 Men du har ret i at der vil ske nøjagtig det samme når man kører programmet.
 
 
  
            
             |   |   
            
        
 
            
         
             Brian Schelde (23-11-2004) 
         
	
            | Kommentar Fra : Brian Schelde | 
  Dato :  23-11-04 14:07 |  
  |   
            "Brian Schelde" <br_sc@hotmail.com> wrote in message
 news:41a31567$0$69570$edfadb0f@dread15.news.tele.dk...
 > Når du signer den fortæller du compileren...
 Jeg mente selvfølgelig caste den.
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |