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


von Khani (Gast)


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

von Mark de Jong (Gast)


Lesenswert?

Hallo Khani,

mach mal folgendes:

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

 aVariable = 3;
 anotherVariable = 10;

 return 1;
}

Grüße Mark,

von olegk (Gast)


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

von U37 (Gast)


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;

von Khani (Gast)


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

von Oryx (Gast)


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

von Peter D. (peda)


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

von Matthias (Gast)


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

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.