www.mikrocontroller.net

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


Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: asddas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach es doch über ein define.

Autor: SuperUser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.