Nach meinem C-Buch, Kapitel 11, (C von a bis z) kann ich ein Array
folgender massen erstellen:
1
DatentypArrayname[Anzahl_der_Elemente];(Syntax)
als Programm Stück:
1
inti[5];
... und als konkretes Beispiel:
1
intmain(void){
2
inti[5];/* Array mit 5 int-Elementen */
3
4
/* Wertzuweisungen des Arrays */
5
i[0]=5;
6
i[1]=100;
7
i[2]=66;
8
i[3]=77;
9
i[4]=1500;
Verwende AVR Studio 6.2
Bekomme leider ein paar Fehlermeldungen dazu, das es falsch ist.
Im Netz finde ich Hinweise auf {}. Auch im Wiki steht nichts zu dieser
Sache drin. Was stimmt den nun?
achim
achim schrieb:> Bekomme leider ein paar Fehlermeldungen dazu, das es falsch ist.
Diese Fehlermeldungen sagen aber normalerweise etwas mehr als "der Code
ist falsch". Anders als machen zu glauben scheinen, ist ihr Inhalt und
die Zeile, auf die sie sich beziehen, essenziell.
Der einzige Fehler, den ich in deinem obigen Programm finden kann, ist
das Fehlen der schließenden geschweiften Klammer am Ende von main().
Bist du sicher, daß der obige Code tatsächlich der ist, den du durch den
Compiler hast laufen lassen und nicht etwa welcher, den du extra für's
Posting nochmal neu geschrieben hast?
Hallo Rolf
bin mir sicher, habe den Code 1:1 aus dem Buch genommen bzw. mit kopie
geholt. Als Fehler wurde nur die Zeile angegeben mit dem Hinweis
"mismatch", waren nur so ca. 3 Worte.
Gibt es Unterschied dabei, wenn das Buch zu Zeiten Studio 4 erstellt
wurde und ich jetzt AVR Studio 6 nehme?
Leider komme ich erst heute abend an die konkreten Infos ran.
In einigen Tuts im Netz wird der Syntax aber immer mit geschweiften
Klammern angegeben.
Werde es testen
achim
Welche Zeile wurde angemeckert?
Der Compiler gibt da sehr genaue Angaben, was ihn stört.
Die { } werden bei Arrays bei der Initialisierung benutzt.
Die hast du hier aber gar nicht.
Das Buch (vor allem die Online-Version) gilt eher als schlecht.
achim schrieb:> bin mir sicher, habe den Code 1:1 aus dem Buch genommen bzw. mit kopie> geholt.
Einmal für den Compiler und einmal für das Posting abgetippt, oder hast
du wirklich den Inhalt der Datei, die du compiliert hast, per copy/paste
ins Posting kopiert? Ich will vermeiden, daß irgendein
Flüchtigkeitsfehler zu einen Unterschied führt zwischen dem, was der
Compiler sieht und dem, was du postest. Sowas hab ich nämlich schon oft
genug erlebt, und das führt meist dazu, daß man Phantome sucht.
achim schrieb:> Als Fehler wurde nur die Zeile angegeben mit dem Hinweis "mismatch",> waren nur so ca. 3 Worte.
Das reicht nicht. Umd dir helfen zu können, brauchen wir die genaue und
vollständige Fehlermeldung (copy/paste) und die Info darüber, auf
welche Zeile sie sich bezieht. Am besten hängst du dann noch gleich das
File an, das du versucht hast zu compilieren.
> Gibt es Unterschied dabei, wenn das Buch zu Zeiten Studio 4 erstellt> wurde und ich jetzt AVR Studio 6 nehme?
Keinen, der dein Problem erklären würde.
Hallo Rolf
hatte danach verschieden Versionen versucht. Alle mit dem gleichen
Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI
ohne Klammern {} und in einigen Tuts mit {} drin.
Hatte schon geschrieben, bin heute abend erst an meinen PC und den
Daten. kann es dir dann schicken. Möchte auch wissen was ich falsch
mache.
achim
achim schrieb:> hatte danach verschieden Versionen versucht. Alle mit dem gleichen> Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI> ohne Klammern {} und in einigen Tuts mit {} drin.
Hier interessiert kein Prosa-Geschwafel, sondern nur FAKTEN, FAKTEN,
FAKTEN. Wenn Du über Prosatexte diskutieren willst, dann besuche ein
Literaturforum.
Fritz Ganter schrieb:> Ich kann echt kotzen!
Besser wäre wenn du lesen könntest:
achim schrieb:> Hatte schon geschrieben, bin heute abend erst an meinen PC und den> Daten.
Fritz Ganter schrieb:> Und kopiere hier endlich die Fehlermeldung rein. Ich kann echt kotzen!achim schrieb:> Hatte schon geschrieben, bin heute abend erst an meinen PC und den> Daten.
achim schrieb:> Als Fehler wurde nur die Zeile angegeben mit dem Hinweis> "mismatch", waren nur so ca. 3 Worte.
Hihi, die Zeile wurde angegeben, aber ich sage sie euch nicht bäätsch!
Wenn ein Integer bei dir >1 Byte ist und du main eine schließende
Klammer spendierst ist der obige Code 100% korrekt.
> Wenn ein Integer bei dir >1 Byte ist
Was immer der Fall sein müsste, da in C ein Mindestwertebereich für
einen int gefordert wird, der sich mit nur 1 Byte nicht abdecken lässt
...
> und du main eine schließende> Klammer spendierst
... und das ist eigentlich etwas, was jeder C-Lernende nach ca. 10
Minuten C lernen intus haben sollte.
Wenn man natürlich immer nur Code aus Online-Tutorien (oder
Online-Büchern) mittels Copy/Paste kopiert und laufen lässt, dann lernt
man die üblichen Tippfehler-Fallen nicht. Lernen geht nicht so, dass man
Code per Copy&Paste von irgendwo herkopiert, compiliert, laufen lässt
und sich am Ergebnis freut. Dabei lernt man genau 0. Zum lernen gehören
auch die typischen Tippfehler am Anfang dazu und das interpretieren der
typischen Fehlermeldungen, die daraus folgen.
achim schrieb:> hatte danach verschieden Versionen versucht. Alle mit dem gleichen> Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI> ohne Klammern {} und in einigen Tuts mit {} drin.
Die Klammern benutzt man, wenn man das ganze Array bei seiner Erstellung
gleich initialisiert. Bei den Zuweisungen an einzelne Elemente, wie du
es oben machst, haben sie nichts zu suchen.
Karl Heinz schrieb:>> Wenn ein Integer bei dir >1 Byte ist>> Was immer der Fall sein müsste, da in C ein Mindestwertebereich für> einen int gefordert wird, der sich mit nur 1 Byte nicht abdecken lässt> ...
Ein Byte kann auch 16 oder 32 oder 27 Bit breit sein. Das ist hier sehr
unwahrscheinlich, aber nicht unmöglich. Allerdings sehe ich nicht, warum
der Code dann nicht funktionieren sollte.
Rolf Magnus schrieb:> Allerdings sehe ich nicht, warum> der Code dann nicht funktionieren sollte.
Ich auch nicht, ich kann auch einer uint8_t 0xFEDCBA9876543210 zuweisen.
Das gibt nur eine Warnung.
Ich nehme an, es geht um das erste Beispiel auf dieser Webseite:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/011_c_arrays_002.htm
Bei mir kompiliert das sowohl mit dem x86_64- als auch mit dem AVR-GCC
ohne Fehler und ohne Warnungen. Da ist bei dir sicher beim Kopieren bzw.
Abtippen etwas schief gegangen.
Ingo Less schrieb:> Fritz Ganter schrieb:>> Und kopiere hier endlich die Fehlermeldung rein. Ich kann echt kotzen!>> achim schrieb:>> Hatte schon geschrieben, bin heute abend erst an meinen PC und den>> Daten.
Sorry, ich hatte Datum und Uhrzeit nicht sorgfältig geprüft gehabt.
Dachte das wäre von gestern und noch immer keine Fehlermeldung gepostet.
Hallo Achim,
mir fällt auf, dass der gezeigte Code nicht zu den Fehlermeldungen passt
(schon in Bezug auf die Zeilennummern der Fehlermeldungen nicht). So
kann/wird Dir niemand helfen ...
Gruß
Dieter
Mann, Achim! Sonst bist Du doch auch nicht so kompliziert unterwegs.
Poste den ganzen Code, am besten die .c Datei und alle Fehlermeldungen.
Ok?
Grüsse,
Renè
Es gibt nur diese beiden Fehlermeldungen. Allerdings für jede Zeile.
Insgesamt 2 x 8.
Es ist korrekt, bin am HT16K33 dran. Er läuft schon, bin nur mit der
Anzeige und den Aufwand der Programmierung noch nicht zu frieden.
Deshalb der Array.
In der ersten Zeile steht
1
int8_tg[8];
Der gesamte andere Code läuft sehr gut ohne Fehler
achim
<Glaskugelmode on>
Der TO hat die Zuweisungen vielleicht nicht innerhalb einer Funktion,
sondern ausserhalb stehen, da wo auch die Deklaration ist.
Ausserhalb von Funktionen sind nämlich keine Statements, und eine
Zuweisung ist ein Statement, sondern allenfalls Deklarationen erlaubt!
Das muesste dann so aussehen:
1
int8_tg[8]={
2
5,
3
05,
4
05,
5
05,
6
05,
7
05,
8
05,
9
05
10
};
Warum eigentlich oktale Zahlen, die erste dann aber doch dezimal ???
Vielleicht aber auch was ganz anderes, k.A. - wir kennen ja den
Originalcode immer noch nicht.
<Glaskugelmode off>
Standardvorgehen wenn man den ganzen Code nicht teilen möchte ist
übrigens ihn so lange einzudampfen, bis nur noch das minimale übrig
bleibt, das den selben Fehler erzeugt. Manchmal findet man auf diese
Weise sogar schon den Fehler.
ZigZeg
Der ori Code macht viele Sachen. Das Stück was suchst besteht fast nur
aus void und so. Habe dein Stück reingesetzt. Jetzt wird alles korrekt
gemacht, ohne Fehler.
Verstehe ich nicht so richtig, da im Buch nichts darüber steht, mit
Klammern und so. Bin ein bischen verwirrt dadurch.
Egal, danke für die Hilfe. Wenn alles fertig ist, kommt der Coder und
alles andere hier rein
achim
Achim Seeger schrieb:> Verstehe ich nicht so richtig, da im Buch nichts darüber steht, mit> Klammern und so.Kai S. schrieb:> Der TO hat die Zuweisungen vielleicht nicht innerhalb einer Funktion,> sondern ausserhalb stehen, da wo auch die Deklaration ist.
Du hast Zuweisungen gemacht. Die sind aber nur innerhalb von Funktionen
erlaubt.
Die Variable wurde vorher definiert und dann willst du sie beschreiben.
Das was Kai geschrieben hat ist einen Definition mit initialisierung.
Die Variable wird angelegt und gleichzeitig mit den Werten vorbelegt.
Das geht auch außerhalb von Funktionen.
Hättest du von Anfang an den vollständigen (oder einen reduzierten,
compilierbaren, noch fehlerbehafteten) Code gepostet, wäre die Sache
schnell geklärt gewesen.