sollte doch perfekt legaler c-Code sein. Wieso beschwert sich der gcc
(AVR8/GNU C Compiler : 4.8.1) mit:
> error: initializer-string for array of chars is too long [-fpermissive]
Der Standard sagt explizit in 6.7.8.14:
1
An array of character type may be initialized by a character string
2
literal, optionally enclosed in braces.
3
Successive characters of the character string literal (including the
4
terminating null character if there is room or if the array is of
5
unknown size) initialize the elements of the array.
Marvin schrieb:> Falsch. "12345" ist sechs Zeichen.
das habe ich nicht bestritten.
Du hast aber auch den von mir zitierten Abschnitt aus dem C-Standard
nicht gelesen.
Der Besagt nämlich, dass aus dem String literal nur so viele Zeichen
benutzt werden, wie Platz in dem Array ist.
Aber ich hab den FEhler gefunden:
mein Dateiname hat am Ende noch 2 zusätzliche 'p's :)
Und der c++ standard sieht das scheinbar anders.
warning schrieb:> Du solltest froh sein, dass der Compiler deinen Programmierfehler> findet.
es ist kein Programmierfehler, sondern wäre hier Intention, sonst hätte
ich auch die explizite gröenangabe wegglassen und den Compiler diese
bestimmen lassen
Der eine sagt Programmierfehler, der andere nennt es schlechten Stil.
Wenn jemand das betrachtet, kann er nicht erkennen was du wolltest:
- 4-Zeichen string, der falsch initialisiert wird
- 5-Zeichen string, wobei Speicher für \0 vergessen wurde
Wir können ja mal abstimmen. ;-)
Vlad Tepesch schrieb:> ich hätte halt nur gern das `sizeof` bzw, ARRAY_SIZE die richtige größe> liefert;
Für den ersten Fall gibt es strlen.
Wenn du weißt was du tust, kannst du bei sizeof ja auch -1 rechnen.
(Aber bitte mit Kommentar dabei)
warning schrieb:> Wenn jemand das betrachtet, kann er nicht erkennen was du wolltest:> - 4-Zeichen string, der falsch initialisiert wird> - 5-Zeichen string, wobei Speicher für \0 vergessen wurde
Für mich ist offensichtlich, daß er keins davon wollte, sondern einen
5-Zeichen-String, der mit Absicht nicht nullterminiert sein soll. C
lässt sowas ganz bewusst zu.
Vlad Tepesch schrieb:> ich hätte halt nur gern das `sizeof` bzw, ARRAY_SIZE die richtige größe> liefert;
Ich hab auch für das eDIPTFT die Steuersequenzen als String im Flash
abgelegt. Zum Senden an das TFT nehme ich dann einfach sizeof()-1.
warning schrieb:> @magnus> static const char txt[10] = "hello worl";>> Und was ist damit gemeint?
Ich versteh jetzt die Frage nicht.
In C ist das identisch zu
Bei der Frage Programmierfehler ja/nein, gilt als sollcher eben auch mit
dem falschen Compiler zu übersetzen. ".cpp" ist eben nicht ".c".
GCC läßt sich aber mit -fpermissive dazu überreden, hier die C++ Syntax
nicht allzu penibel auszulegen, denn er ahnt ja was gemeint war.
@KHB
Betrachtet man nur die code Zeile, ist nicht erkennbar, was der
Programmierer wollte. In meinem Beispiel fehlt am Ende das d. Absicht
oder Fehler?
Ich halte das daher für einen schlechten Stil. Nicht alles was erlaubt
ist, ist gut und muss ausgenutzt werden. ;-)