Hallo,
ich benutze AVR8 GCC 3.4.1 (Studio 6.2).
In einer Header-Datei "PeripherieRoutinen.h" steht:
typedef enum faultoutp_enum
{
FAULTOUT_LOWS = 0, /**< Fehleraktion: Ausgänge auf low */
FAULTOUT_HIGHS = 1, /**< Fehleraktion: Ausgänge auf high */
FAULTOUT_HIZ = 2, /**< Fehleraktion: Ausgänge hochohmig */
} AWEX_faultoutp_t;
In der c-Datei steht:
#include "PeripherieRoutinen.h"
void Set_AWEX_Channel(AWEX_t *awex, char channel, AWEX_complbridge_t
complbridge, AWEX_faultoutp_t faultoutp)
{
....
if(faultoutp == AWEX_FAULTOUT_HIZ)
...
}
Der Compiler meldet mit in der c-Datei den Fehler:
'AWEX_FAULTOUT_HIZ' undeclared (first use...)
Ich weis einfach nicht, was da falsch sein soll. In den ioxxx.h ist es
doch genauso gemacht?
Ein einfacher Schreibfehler. Du hast als enum Werte solche ohne "AWEX_" am Beginn definiert.
Alexxx schrieb: > Der Compiler meldet mit in der c-Datei den Fehler: > 'AWEX_FAULTOUT_HIZ' undeclared (first use...) Logisch. Deine Werte heissen ja auch
1 | FAULTOUT_LOWS
|
2 | FAULTOUT_HIGHS
|
3 | FAULTOUT_HIZ
|
Uups, DANKE! oh mann, manchmal sieht man den einfachsten Fehler nicht. Wäre mir peinlich, wenn ich nicht wüsste, dass es anderen auch mal so geht ;-)
Das Komma hinter "FAULTOUT_HIZ = 2, " könnte auch noch Probleme machen.
Naja. In Fällen von solchen Meldungen, wenn man nicht auf Anhieb darauf kommt und steinhart schwören würde, dass der als undeclared bezeichnete Term doch deklariert bzw. definiert wurde, sucht man einfach mal in allen Dateien danach. Wenn man dann nicht fündig wurde (das ist dann eine Bestätigung der Compilermeldung), guckt man mal, wo das seiner Meinung nach deklariert bzw. definiert sein sollte und starrt das solange im Vergleich mit der inkriminierten Stelle an, bis der Groschen fällt (falls man noch Groschen hat). :-) Falls man den Term doch findet, fehlt die entsprechende Datei im Projekt.
Felix A. schrieb: > Das Komma hinter "FAULTOUT_HIZ = 2, " könnte auch noch Probleme > machen. Das ist schon ok. Das ist erlaubt. Genauso wie hier bei einer Array Initialisierung
1 | int a[] = { 5, |
2 | 6, |
3 | 7, |
4 | };
|
Das ist eines der Dinge, bei der die Sprachdesigner den Programmierer im Mittelpunkt gesehen haben, der Initialisierungen (speziell wenn Arrays aus struct initialisiert werden) von einer Zeile zur nächsten weiterkopiert. Will man dann einen weiteren Wert ergänzen, dann ist das ein 'pain in the ass', wenn man da jedesmal in der vorhergehenden Zeile erst noch einen , ergänzen muss. Da ist es ganz praktisch, wenn man einen , machen darf, auf den dann kein Wert mehr folgt.
Falls man keine Groschen hat, gehen auch 20 Cent Stücke. Die sind ungefähr genauso schwer und genauso viel wert (nach dem offiziellen Umrechnungskurs von Deutschen Mark).
@ Felix Adam Es geht mit einem abschließenden ","! Das wundert mich auch, da im Internet Beispiele ohne das "," beim letzen Element. Jedoch habe ich gesehen, dass in den ioxx.h des Compilers jedes Element ein Komma am Ende hat. Wird wohl nicht ganz Standard-konform sein.
Ah, okay. Ich meinte mich erinnern zu können, dass sowas bei mir zu Fehlern geführt hat. Ein kurzer Test mit dem AVR Studio meldet aber keinen Fehler. Also doch erlaubt.
Klaus schrieb: > Falls man keine Groschen hat, gehen auch 20 Cent Stücke. Die sind > ungefähr genauso schwer und genauso viel wert (nach dem offiziellen > Umrechnungskurs von Deutschen Mark). Nö, da hast Du 1:2 mit 2:1 velwechsert. ;-)
Klaus schrieb: > Falls man keine Groschen hat, gehen auch 20 Cent Stücke. Die sind > ungefähr genauso schwer und genauso viel wert (nach dem offiziellen > Umrechnungskurs von Deutschen Mark). Vielleicht nach Inflationsbereinigung, nach dem offiziellen Kurs müsstest du jedoch ein 5 Cent Stück nehmen, das ist dann aber leichter als ein Groschen.
Felix A. schrieb: > Ah, okay. Ich meinte mich erinnern zu können, dass sowas bei mir zu > Fehlern geführt hat. In C ist so etwas erlaubt, aber nicht in z.B. VHDL. Dort darf leider kein Komma am Ende einer Aufzählung stehen. :-(
Alexxx schrieb: > ich benutze AVR8 GCC 3.4.1 (Studio 6.2) Nanu, ist bei Atmel-Studio 6.2 nicht ein AVR-GCC 8.xx dabei?
Das ist doch nur erlaubt, damit man Code leichter automatisch erzeugen lassen kann und man in einer Schleife keine Fallunterscheidung machen muss, ob ein Komma nötig ist oder verboten...
Walter Tarpan schrieb: > Alexxx schrieb: >> ich benutze AVR8 GCC 3.4.1 (Studio 6.2) > > Nanu, ist bei Atmel-Studio 6.2 nicht ein AVR-GCC 8.xx dabei? Sollte heißen: 4.8.xx
Malte S. schrieb: > Vielleicht nach Inflationsbereinigung, nach dem offiziellen Kurs > müsstest du jedoch ein 5 Cent Stück nehmen, das ist dann aber leichter > als ein Groschen. Richtig. Danke. Da habe ich falsch herum gerechnet. Dann ist es also billiger geworden, wenn der Groschen fällt. :-)
Walter Tarpan schrieb: > Walter Tarpan schrieb: >> Alexxx schrieb: >>> ich benutze AVR8 GCC 3.4.1 (Studio 6.2) >> >> Nanu, ist bei Atmel-Studio 6.2 nicht ein AVR-GCC 8.xx dabei? > > Sollte heißen: 4.8.xx Das 3.4.1 ist die Version der Atmel-Toolchain, nicht die des Compilers :) und ja, fuer AVR ist glaube ich ein GCC 4.8.3 und fuer ARM ein GCC 4.8.1 dabei. Gruesse
Alexxx schrieb: > Wird wohl nicht ganz Standard-konform sein. C99 6.7.2.2 Enumeration specifiers:
1 | enum-specifier: |
2 | enum identifier_opt { enumerator-list }
|
3 | enum identifier_opt { enumerator-list , }
|
4 | enum identifier |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.