| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | mkptypes og __attribute ((foo)) Fra : Anders Wegge Keller | 
  Dato :  08-11-10 17:55 |  
  |   
            
  PÃ¥ mit arbejde har vi en delvist hjemmestrikket buildchain, hvori der
 indgår en automatisk generering af prototyper for en række source
 filer.
 
  Inde i maven af denne prototypegenerering indgår et tudsegammelt
 public domain værktøj, mkptypes, der efter hvad jeg kan google mig
 til, stammer tilbage fra starten af 90'erne. Uheldigvis er jeg kommet
 i klemme i forbindelse med portwering af et projekt fra SCO til Linux,
 hvor jeg har følgende dilemma:
 
  -- init.c --
   
   ...
   static int IaRset (void *foo, int bar) {
   ...
 
  ++ init.c ++
 
  Nu er denne funktion i dette specifikke tilfælde ubrugt, så gcc klager sig:
 
 init.c:77: warning: `IaRset' defined but not used
 
  Da der er tale om et standardprodukt, der er merget ind i min
 specifikke branch, er jeg lidt ked af at fjerne den. Den vil efter al
 sandsynlighed bare blive merget ind, næste gang der kommer en
 opdatering. I stedet har jeg fortalt gcc at det er OK at den ikke er i
 brug:
 
 
  -- init.c --
   
   ...
 __attribute__ ((unused))  static int IaRset (void *foo, int bar) {
   ...
 
  ++ init.c ++
 
  Det virker fint for gcc, men til gengæld får jeg så en noget aparte
 prototype ud af mkptypes:
 
 extern int __attribute__(static int IaRset  (void *foo, int bar));
 
 
  Mit dilemma består i at vi har vedtaget at vi ikke vil have kode med
 warnings af nogen som helst art kørende i drift, så selvom det i denne
 sammenhæng er en ubetydlig en af slagsen, får jeg stadig dummehatten,
 hvis jeg lader den slippe igennem. SÃ¥ hvis der er nogen af jer der
 kender samme problem, og har lavet den nødvendige rettelse i mkptypes,
 eller alternativ kender en anden måde at få lavet en liste med
 protoyper, vil jeg gerne høre om det.
 
  Jeg kender -aux-info til gcc, men det er en ikke-triviel ændring af
 build, hvis jeg skal implementere prototyperne ad den vej. 
 
 -- 
 /Wegge
 
 Leder efter redundant peering af dk.*,linux.debian.*
  
            
             |   |   
            
        
 
            
         
           Soeren Sandmann (14-11-2010) 
         
	
            | Kommentar Fra : Soeren Sandmann | 
  Dato :  14-11-10 18:23 |  
  |   
            Anders Wegge Keller <wegge@wegge.dk> writes:
 
 >  Da der er tale om et standardprodukt, der er merget ind i min
 > specifikke branch, er jeg lidt ked af at fjerne den. Den vil efter al
 > sandsynlighed bare blive merget ind, næste gang der kommer en
 > opdatering. I stedet har jeg fortalt gcc at det er OK at den ikke er i
 > brug:
 > 
 > 
 >  -- init.c --
 >   
 >   ...
 > __attribute__ ((unused))  static int IaRset (void *foo, int bar) {
 >   ...
 > 
 >  ++ init.c ++
 > 
 >  Det virker fint for gcc, men til gengæld får jeg så en noget aparte
 > prototype ud af mkptypes:
 > 
 > extern int __attribute__(static int IaRset  (void *foo, int bar));
 > 
 > 
 >  Mit dilemma består i at vi har vedtaget at vi ikke vil have kode med
 > warnings af nogen som helst art kørende i drift, så selvom det i denne
 > sammenhæng er en ubetydlig en af slagsen, får jeg stadig dummehatten,
 > hvis jeg lader den slippe igennem. 
 
 Hvad med bare at fjerne "static"? Det vil få GCC til at holde op med
 at advare. En anden mulighed er at tilføje
 
         if (0)
             IaRset (NULL, 0);
 
 Ældre versioner af GCC kan ikke finde ud af funktionen stadigvæk ikke
 er i brug, men nyere versioner kan vist.
 
 Eller hvad med 
 
         #define UNUSED  __attribute__ ((unused))
 
 Måske vil mkptypes så lade den slippe igennem?
 
 
 
 Søren
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |