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