Forum: Mikrocontroller und Digitale Elektronik Error-Makro funktioniert nicht.


von Christian K. (christiankarle)


Angehängte Dateien:

Lesenswert?

Morgen,

weis Jemand wieso diese Makros nicht funktionieren?


Die Variablen Brightness und Channel stehen in einer Methode (sind die 
Parameter der Methode).

--> void Set_Channel_Brightness ( uint8_t Channel, uint16_t Brightness )

{
...
}

von Max H. (hartl192)


Lesenswert?

Das Argument von #if muss zur Kompilezeit bekannt sein, sind sie das?

von Christian K. (christiankarle)


Lesenswert?

Ja, ich rufe die Methode in der Main-Methode auf, gleich am Anfang. Dann 
gebe ich zum Beispiel 5000 für Brightness ein und 50 für Channel.

Es kommt keine Fehlermeldung zurück...

von Max H. (hartl192)


Lesenswert?

Christian Karle schrieb:
> Ja, ich rufe die Methode in der Main-Methode auf, gleich am
> Anfang. Dann gebe ich zum Beispiel 5000 für Brightness ein und 50 für
> Channel.
Nein, das sind Variablen und der Präprozessor kennt den Wert nicht. Den 
Inhalt von Variablen kannst du erst zur Laufzeit überprüfen.

von (prx) A. K. (prx)


Lesenswert?

Christian Karle schrieb:
> Es kommt keine Fehlermeldung zurück...

Das ist kein Kriterium. Der Präprozessor ist bekannt dafür, bei 
Rechenausdrücken in #if noch im grössten Blödsinn einen Sinn zu 
erkennen. So beispielsweise wenn er Namen darin nicht kennt. Weil er, 
wie de Name schon sagt, (formell) vor dem Compiler vorneweg läuft und 
deshalb dessen Variablen nicht kennt.

von Christian K. (christiankarle)


Lesenswert?

Ok, Danke.

Gibt es trotzdem eine Möglichkeit über diesen Weg, dem Benutzer eine 
solche Eingabe zu "verbieten" ?

von (prx) A. K. (prx)


Lesenswert?

Nein. Nicht auf diesem Weg, also nicht mit Präprozessorbefehlen.

von Christian K. (christiankarle)


Lesenswert?

Gut, Dankeschön für die schnelle Hilfe :)

von g457 (Gast)


Lesenswert?

..wenn Du
1
#if
durch
1
if (
und
1
#error
durch
1
)
2
{
3
    traceError(
sowie
1
#endif
durch
1
);
2
    return errorCondition;
3
}

..ersetzt dann geht das auch zur Laufzeit. traceError und errorCondition 
(sowie der zugehörige Rückgabetyp) müssen latürnich noch richtig(tm) 
hingeschreiben werden.

HTH

von Thomas E. (thomase)


Lesenswert?

"Ungültige Hellichkeit..."

Sei froh, dass das nicht angezeigt wird.

mfg.

von Christian K. (christiankarle)


Lesenswert?

Sry, ich bin wohl etwas müder, als ich dachte...
Hab die halbe Nacht durchgearbeitet :D

von Fehlersucher (Gast)


Lesenswert?

Meinten Sie: Herrlichkeit

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.