Probleme mit dem Keil-Compiler

Gast #110101
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
Gast #110102
Hallo Khani,

mach mal folgendes:

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

 aVariable = 3;
 anotherVariable = 10;

 return 1;
}

Grüße Mark,
Gast #110103
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
Gast #110104
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;
Gast #110105
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
Gast #110106
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
#110107
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
Gast #110108
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.