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

Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407821
Brugere : 218875

Månedens bedste
Årets bedste
Sidste års bedste