www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem Keil-Compiler


Autor: Khani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

hat schon mal jemand von Euch mit dem Keil-Compiler gearbeitet ? Wenn
ja, dann könnt Ihr ja mal versuchen mir zu helfen.

bei mir lässt sich das nachfolgende Simpel-Programm nicht kompilieren
!

int main(void)
{
 unsigned int aVariable;
 aVariable = 3;
 unsigned int anotherVariable;
 anotherVariable = 10;

 return 1;
}

Was dem Compiler nicht zu gefallen scheint, ist dass die Variable
anotherVariable angelegt wird, nachdem man die Variable aVariable
verändert hat, bzw. damit gearbeitet hat.

Ist das immer so ? Oder liegt das an den Einstellungen des Compilers ?
Ich habe auch schon bei Keil nachgeschaut - bin aber genauso schlauf
wie vorher.

Danke für Eure Hilfe, Daniel

Autor: Mark de Jong (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Khani,

mach mal folgendes:

int main(void)
{
 unsigned int aVariable;
 unsigned int anotherVariable;

 aVariable = 3;
 anotherVariable = 10;

 return 1;
}

Grüße Mark,

Autor: olegk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
entweder so:
int main(void)
{
 unsigned int aVariable;
 unsigned int anotherVariable;
 aVariable = 3;
 anotherVariable = 10;

 return 1;
}
oder so:
int main(void)
{
 unsigned int aVariable = 3;
 unsigned int anotherVariable = 10;

 return 1;
}

Ja, es ist immer so
Gruß,
oleg

Autor: U37 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also dein problem ist eigentlich ganz easy
wenn du dinge initialisierst muss das vor der vergabe von avariable
sein

also es müsste so gehen:
 unsigned int aVariable;
 unsigned int anotherVariable;

 aVariable = 3;
 anotherVariable = 10;

Autor: Khani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Leute,

wie ich das umgehen kann, das hatte ich mir schon ausgerechnet - aber
so gefällt mir das irgendwie nicht. Das ist ja wie bei PASCAL - alle
Variablen am Anfang instanzieren und dann loslegen. Dann brüsten die
von Keil sich auf Ihrer Homepage noch damit, das der Compiler - ANSI-C
konform wäre. Also ich habe schon mit anderen ANSI-C-Compilern
gearbeitet, da ging das !

Naja, was soll's. ;-))

Danke auf jeden Fall, Khani

Autor: Oryx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Khani,
dein Ansinnen halte ich für sinnvoll. Deshalb ist es ja auch in C++
eingeführt worden.

Es wird halt nicht vom C Standard gedeckt. Evtl. vom neuesten oder auch
von irgendeiner älteren Variante.

Auf jeden Fall ist es kein Fehler oder Problem von Keil. Wenn es bei
anderen Compilern läuft, so ist das eine Auslegungssache des
Herstellers.

Wenn du wirklich kompatiblen Code schreiben willst, musst du dich auf
den kleinsten gemeinsamen Nenner einstellen.

MfG
Oryx

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In ANSI-C kann man Variablen nur am Beginn eines Blocks anlegen, bevor
irgendeine Operation kommt.
Mach also einfach einen neuen Block auf:

int main(void)
{
  unsigned int aVariable;
  aVariable = 3;
  {
    unsigned int anotherVariable;
    anotherVariable = 10;
  }
  return 1;
}


Das ein Compiler ANSI-C versteht, heißt aber nicht, das er NUR ANSI-C
versteht.
D.h. er kann durchaus eigene Konstrukte haben, was dann aber zur Folge
hat, daß solche Sourcen dann nicht mehr von nur ANSI-C Compilern
verstanden werden.

Dein obiges Programm ist definitiv kein ANSI-C.


Peter

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@peter
Das erste Programm ist sehr wohl ANSI-C. Allerdings nicht ANSI-C 89
sondern ANSI-C 99. Das läßt Variablendeklaration auch mitten in der
Funktion zu und nicht nur am Funktionskopf. Den GCC kann man per
-std=c99 in den C99 Modus versetzen.

Matthias

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.