Forum: Compiler & IDEs undeclared (first use in this function)


von Tobias (Gast)


Lesenswert?

Hallo,

mein C ist ein wenig eingerostet und ich habe beim Aufarbeiten meiner 
alten Projekte ein Problem.

Mein Programm hat eine header.h, uart.c und  main.c.

in der Uart.c definierse ich folgende Variable:
1
volatile char uart_string[UART_MAXSTRLEN + 1] = "";

Diese wird dann von der Interrupt routine in der gleichen Datei genutzt.
Nun möchteich sie aber in in der Main.c nutzen dies klapt aber nicht.
1
   if(uart_string[0] == 'a')
2
  {
3
....

Ich bekomme dann folgenden Fehler
1
Fehler  2  'uart_string' undeclared (first use in this function)  C:\...\main.c  20  7  uart1

Ist habe bestimmt irgendwas Grundlegendes vergessen. Vielen Dank

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> Ist habe bestimmt irgendwas Grundlegendes vergessen. Vielen Dank


Ja.
Das es den Compiler einen feuchten Kehrricht interessiert, was in uart.c 
steht, wenn er main.c compiliert. Jede C-Datei wird für sich selber und 
unabhängig von allen anderen übersetzt.

http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien

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


Lesenswert?

Wenn du dir mal den Unterschied zwischen einer Deklaration und einer
Definition vergegenwärtigst, dann kannst du das auch bereits aus der
Fehlermeldung deuten.

Über die fehlende Deklaration beklagt sich bereits der Compiler,
denn er hat zu dem Zeitpunkt, da er main.c compiliert, keine Kennung
davon erhalten, was denn uart_string für ein Objekt sein soll.  Falls
uart_string jedoch ordnungsgemäß deklariert wäre, am Ende aber in
keiner einzigen Objektdatei zu finden wäre, würde sich der Linker
über eine fehlende Definition dieses Symbols beschweren (Objekte und
Funktionen hält der Linker nur noch bedingt auseinander; für ihn sind
das alles nur noch Symbole, die er auflösen muss, d. h. denen er
letztlich einen Platz in einem Segment zuweist, um damit das Symbol
einer Adresse zuordnen zu können).

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.