www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Constant value in Header-File definieren


Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe in einem Header-File eine globale Variable definiert um die 
Längen mehrerer Vektoren festzulegen. Allerdings verlangt der Compiler, 
dass 'length' einen konstanten Wert haben muss. Ich benutze globale 
Variable auch nur ungern, aber in diesem Fall muss es leider sein.

Fehlermeldung:
cc0028:  error: expression must have a constant value
extern fract16 coeff[length];
extern const   int length=5;
extern   fract16 coeff[length];

Ich bin nicht so der C-Kenner, aber mein Fehler erscheint mir nicht ganz 
so logisch, Euch ja vielleicht schon.

Ich bedanke mich bereits jetzt für Eure Hilfe.

Daniel

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Pfefferkorn wrote:
> Fehlermeldung:
> cc0028:  error: expression must have a constant value
> extern fract16 coeff[length];
>
>
> extern const   int length=5;
> extern   fract16 coeff[length];
> 
wenn Du ein Array anlegen willst, dann muss dessen Länge konstant UND 
zum Zeitpunkt des Compilierens bekannt sein! Da ändert auch die 
Deklaration mit "const" nichts dran. Der Ausdruck in der eckigen Klammer 
muss ein Zahlenwert sein. Und den Wert Deines "length" kennt der 
Compiler nicht...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzige, was Du an der Stelle sinnvollerweise machen könntest, wäre 
eine Präprozessor-Anweisung (Makro)
#define LENGTH 5
//...
extern fract16 coeff[LENGTH];

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> Das einzige, was Du an der Stelle sinnvollerweise machen könntest, wäre
> eine Präprozessor-Anweisung (Makro)
>
> #define LENGTH 5
> //...
> extern fract16 coeff[LENGTH]
> 

Funktioniert leider nicht, denn die Idee hatte ich auch schon.

Das Ergebnis:

"hall.h", line 44: cc0017:  error: expected a "]"
  extern fract16 coeff[length];
                       ^

"hall.h", line 44: cc0169:  error: expected a declaration
  extern fract16 coeff[length];

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, erstens fehlte in meinem Posting ein ";" nach der Deklaration, und 
zweitens solltest Du vielleicht mal das posten, was Du jetzt geschrieben 
hast.

EDIT: Nur so als Anmerkung: C ist Case-sensitiv. "LENGTH" ist nicht 
gleich "length"...

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab es jetzt nochmal versucht und siehe da, es geht. Hab vorher wohl 
irgendeinen dummen Fehler gemacht.

Mit
#define LENGTH 5
extern   fract16 coeff[LENGTH];

geht es.


UUPS: Jetzt weiß ich auch, welchen Fehler ich gemacht habe.

Ich hatte vorher
#define LENGTH 5;
 geschrieben.

Und das Semikolon ... also nein, jetzt schäme ich mich.

Danke für Deine überaus schnelle Hilfe!

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.