Forum: Compiler & IDEs gcc meldet Fehler bei printf eines Arrays


von Otto Richter (Gast)


Lesenswert?

Hallo da draußen,

mein gcc meldet beim Compilieren:

../../main.h:23: warning: 'sw_version' defined but not used

Die Variable ist in main.h als Array definiert:

static uint8_t sw_version[] = "0.9" ;

Ich verwende die Variable sw_version aber folgendermaßen:

...
printf("SW-Version: ") ;
printf(" %s ", sw_version ) ;
printf("   compiled   "  __DATE__"    " _TIME_ "\r\n") ;
…

Das Programm läuft einwandfrei, aber da muss noch ein Fehler sein.
Welcher ?

Danke für die Hilfe !

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Es ist nicht sinnvoll, eine als static deklarierte Variable in
einem Headerfile zu deklarieren.

von Otto Richter (Gast)


Lesenswert?

Hallo Jörg,

danke für Deine prompte Antwort, aber...

ich habe in main.h alle "zentralen" Konstanten, wie Takt, Bitrate,
Entprellzeit etc. stehen und möchte hier auch eine Versionsnummer als
string mitführen, die mit printf ausgegeben werden soll.

Wie macht man so was denn dann ?

Schönen WE

Otto

von asddas (Gast)


Lesenswert?

Mach es doch über ein define.

von SuperUser (Gast)


Lesenswert?

Das "macht man" folgendermassen:*

a) Die Variablendeklaration kommt in das *.c File
z.B:

volatile int8_t enc_delta=0;       // -128 ... 127

Damit wird die Variable physikalisch angelegt und kann auch
initialisiert werden.

b) Alle globalen Variablen, die nach aussen sichtbar sein müssen kommen
ins Header file *.h
z.B:

extern volatile int8_t enc_delta;       // -128 ... 127

Damit wird dem Compiler nur der Typ bekannt gegeben (extern). Der
Linker sorgt dann für die Verbindung mit der physikalisch angelegten
Variable. Hier ist eine Initialisierung Unsinn und daher falsch.

In C sind globale Variablen per default static. Das static ist also
nicht notwendig (In C++ ist das anders)


* natürlich gibt es wie immer viele Möglichkeiten, aber die hier ist
üblich

von Fritz G. (fritzg)


Lesenswert?

>In C sind globale Variablen per default static. Das static ist also
>nicht notwendig (In C++ ist das anders)

Sind sie nicht. In C sind sie programmweit gültig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.