www.mikrocontroller.net

Forum: Compiler & IDEs constanten und static definition Problem


Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
warum will der AVR-gcc folgendes nicht:
void fun(void)
{
    static const uint16_t c_datalen     = 500;  /**< loggin buffer size */
    static uint8_t s_data[c_datalen]; /**< logging buffer */ 

   // more code
}

da kommt nur die meldung:
error: storage size of 's_data' isn't constant

sieht für mich aber sehr konstant aus!

Ich verwende lieber constanten als #defines.

Bin mir ziemlich sicher, dass andere Compiler das akzeptieren.

ist das ein gcc-Bug?

Gruß,
vlad

edit:code

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, es geht geht nicht.

Es könnte höchstes sein, das nach dem neuen Standard innerhalb ein 
Funktion geht. Aber genau es dem Grund gibt es ja defines.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit const hat so ziemlich jeder Compiler so sein tun ...

Ich habe auch schon versucht eine Komponente "ordentlich" zu schreiben, 
indem ich defines durch const ... Ausdrücke ersetzt habe, spätestens bei 
switch-case Anweisungen fliegt man damit aber auch bei den meisten 
Compilern auf die Nase.

Warum sollte man const anstelle eines define verwenden?
1. type-safety
2. Debugging (im Debugger werden die Werte einer Variable angezeigt)

Gleiches gilt für Makros.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C sind "const" Daten unveränderliche Variablen, aber nicht äquivalent 
zu lexikalischen Konstanten. Wo immer die C-Sprache einen konstanten 
Ausdruck verlangt sind konstante Variablen nicht verwendbar.

So ist C definiert. Wer das unlogisch findet, der möge sich bei den 
ANSI-Komitees für C89 und C99 beschweren, oder auf C++ umsteigen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mit const hat so ziemlich jeder Compiler so sein tun ...

Naja, er muß es eben so machen, wie es in der C-Norm definiert ist.

> Ich habe auch schon versucht eine Komponente "ordentlich" zu schreiben,
> indem ich defines durch const ... Ausdrücke ersetzt habe, spätestens bei
> switch-case Anweisungen fliegt man damit aber auch bei den meisten
> Compilern auf die Nase.

Bei allen konformen C-Compilern. Bei C++ ist es was anderes. Da ginge 
das.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also doch enums oder defines ;(

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.