Forum: Compiler & IDEs Array erstellen


von achim (Gast)


Lesenswert?

Nach meinem C-Buch, Kapitel 11, (C von a bis z) kann ich ein Array 
folgender massen erstellen:
1
Datentyp Arrayname[Anzahl_der_Elemente];  (Syntax)

als Programm Stück:
1
int i[5];

... und als konkretes Beispiel:
1
int main(void) {
2
   int i[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

von Rolf M. (rmagnus)


Lesenswert?

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?

von achim (Gast)


Lesenswert?

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

von Dirk B. (dirkb2)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

achim schrieb:
> Als Fehler wurde nur die Zeile angegeben mit dem Hinweis "mismatch",
> waren nur so ca. 3 Worte.

Präziser.

von mec (Gast)


Lesenswert?

achim schrieb:
> i[4] = 1500;

Wieviel Bit hat ein int in deinem Fall?

von mec (Gast)


Lesenswert?

vergiss, was ich geschrieben habe, da ich nur mit xx_t typen arbeite, 
habe ich vergessen das ein int min 16 bit haben sollte.

von Rolf Magnus (Gast)


Lesenswert?

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.

von achim (Gast)


Lesenswert?

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

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Fritz G. (fritzg)


Lesenswert?

Hast du endlich mit } die main() zugemacht?

Und kopiere hier endlich die Fehlermeldung rein. Ich kann echt kotzen!

: Bearbeitet durch User
von leser (Gast)


Lesenswert?

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.

von Ingo L. (corrtexx)


Lesenswert?

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.

von zapotek (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

> 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.

von Rolf Magnus (Gast)


Lesenswert?

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.

von leser (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Fritz G. (fritzg)


Lesenswert?

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.

von Achim S. (achims)


Lesenswert?

Du bekommst sie gleich.

von Achim S. (achims)


Angehängte Dateien:

Lesenswert?

So, da ist es.
1
int8_t g [8] ;
2
3
g [0] = 5;
4
g [1] = 05;
5
g [2] = 05;
6
g [3] = 05;
7
g [4] = 05;
8
g [5] = 05;
9
g [6] = 05;
10
g [7] = 05;
Vielleicht fällt jemand was auf
achim

von Dieter F. (Gast)


Lesenswert?

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

von Dieter F. (Gast)


Lesenswert?

Yalu X. schrieb:
> Ich nehme an, es geht um das erste Beispiel auf dieser Webseite:

Nö - Achim probiert HT16K33 aus ...

von Fritz G. (fritzg)


Lesenswert?

Poste mal den ganzen Code, vielleicht hast du g schon weiter oben 
deklariert.

von Rene H. (Gast)


Lesenswert?

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è

von Achim S. (achims)


Lesenswert?

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_t g [8] ;
Der gesamte andere Code läuft sehr gut ohne Fehler
achim

von Kai S. (zigzeg)


Lesenswert?

<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_t g [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

: Bearbeitet durch User
von Achim S. (achims)


Lesenswert?

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

von Dirk B. (dirkb2)


Lesenswert?

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.

von Walter (Gast)


Lesenswert?

Achim Seeger schrieb:
> Wenn alles fertig ist, kommt der Coder und
> alles andere hier rein

Bitte nicht

von achim (Gast)


Lesenswert?

Warum nicht?

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.