|
| fjerne unreferereded funktioner under link~ Fra : Ukendt |
Dato : 29-05-06 19:46 |
|
Hej,
På de embeddede platforme jeg har arbejdet med har jeg vænnet mig til at
compileren og linkeren er i stand til at fjerne urefererede funktioner. Jeg
synes umiddelbart at det er handy når man laver to versioner af et program
at man bare ifdeffer kaldet af funktionen, så fjerner linkeren den
pågældende funktion og alle funktioner der kun kaldes af denne, og alle
tabeller der kun referes af disse funktioner, der nu er cuttet ud.
Mener I at dette er en almindelig feature i embeddede compilere ?
Mener I at dette er en brugbar feature ?
(Man kan jo klare sig uden, ved at udvidde #ifdef helvedet)
Grunden til sp. er at det overraskede mig at GCC linkeren generelt (eller
måske kun til Atmel AVR platformen), ikke kan dette.
tpt
| |
Eric Jensen (24-06-2006)
| Kommentar Fra : Eric Jensen |
Dato : 24-06-06 10:00 |
|
"Troels Thomsen" <nej tak ...> skrev i en meddelelse
news:447b4143$0$148$edfadb0f@dread16.news.tele.dk...
> Mener I at dette er en almindelig feature i embeddede compilere ?
Det er meget almideligt i de compilere/linkere jeg bruger og kender til. Men
forment understøtter alle det ikke.
> Mener I at dette er en brugbar feature ?
> (Man kan jo klare sig uden, ved at udvidde #ifdef helvedet)
Jeg synes det er bedst, at bruge #if defined macroen. Det giver en god
indikation om hvor og i vilke tilfælde denne funktion skal inkluderes,
vilket er meget rart hvis man læser andres kode. Men det er da brugbart nok,
at linkeren fjerner funktion du selv har glemt, at fjerne eller "if-deffe",
af en eller anden grund.
For eksemple kan man savne atoi() når man skriver kode der skal compiles på
en linux boks. Her synes jeg det giver mest mening at "if-deffe" sin egen
version, som kun skal compiles hvis det er linux. Og så er man også sikker
på at, undgå konflikter når programmet compiles på en platform der har
atoi() i forvejen. Og har du et større project kan du spare lidt tid ved, at
compileren ikke skal oversætte kode du aligevel ikke skal bruge.
#if defined (__linux__)
int atoi(const char *str) {
// kode
}
#endif
//eric
| |
Kent Friis (24-06-2006)
| Kommentar Fra : Kent Friis |
Dato : 24-06-06 12:19 |
|
Den Sat, 24 Jun 2006 10:59:41 +0200 skrev Eric Jensen:
>
> For eksemple kan man savne atoi() når man skriver kode der skal compiles på
> en linux boks.
WTF?
ATOI(3) Linux Programmer's Manual ATOI(3)
NAME
atoi - convert a string to an integer.
SYNOPSIS
#include <stdlib.h>
int atoi(const char *nptr);
DESCRIPTION
The atoi() function converts the initial portion of the
string pointed to by nptr to int.
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).
| |
Eric Jensen (24-06-2006)
| Kommentar Fra : Eric Jensen |
Dato : 24-06-06 12:49 |
|
"Kent Friis" <nospam@nospam.invalid> skrev i en meddelelse
news:449d1f91$0$15784$14726298@news.sunsite.dk...
> Den Sat, 24 Jun 2006 10:59:41 +0200 skrev Eric Jensen:
>>
>> For eksemple kan man savne atoi() når man skriver kode der skal compiles
>> på
>> en linux boks.
>
> WTF?
>
> ATOI(3) Linux Programmer's Manual ATOI(3)
Skulle havde været itoa()
//eric
| |
|
|