Forum: Compiler & IDEs Eigene Hinweise im AVRStudio erzeugen?


von TobiTob (Gast)


Lesenswert?

Hallo,

ich habe mich heute fast 2h daran aufgehangen einen Fehler in meinem 
Programm zu finden. Das Problem war das ich einen Char Buffer überfahren 
habe. :-(

Ich würde es nun toll finden wenn man beim erstellen eigener 
Unterprogramme eine kleine Prüfung einbauen könnte. Sodas mich AVR 
Studio warnt wenn ich mal wieder daneben liege.

Mein Aufruf wäre in etwa so...

fill_str(buffer, 5, '0');

nun soll er den buffer mit dem Char '0' auffüllen bis die Länge 5 
erreicht ist.

In der Function fill_str wäre es nun vorteilhaft das er mir eine Warnung 
oder Fehler ausspuckt wenn der Länegenparameter einen bestimmten Bereich 
verläst. Sagen wir nicht mehr als 10.

Wie kann man sowas machen?

Gruß Tobi...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mit assert().  Allerdings macht assert bei Fehlern eine Ausgabe nach
stderr, dafür solltest du also was dahinter haben, und danach einen
abort().

von TobiTob (Gast)


Lesenswert?

Danke für die Antwort.
Kannst Du mir das bitte an einem Beispiel etwas genauer erklären?

Eine Fehlermeldung wenn er beim compilieren merkt das der Wert width>5 
ist wäre ein guter Ansatz, dann kann ich weitere Situationen bestimmt 
davon ableiten.

Es werden ja Fehler und Warnungen ausgegeben, kann man das beides 
steuern?

Gruß Tobi...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Eine Fehlermeldung wenn er beim compilieren merkt das der Wert width>5
> ist wäre ein guter Ansatz, dann kann ich weitere Situationen bestimmt
> davon ableiten.

Bei assert() kann man die Fehlermeldung zur Laufzeit erzeugen lassen.
http://www.nongnu.org/avr-libc/user-manual/group__avr__assert.html

Zur Compilezeit so was zu machen, ist IMHO nicht möglich, denn dazu 
müsste der Compiler eine Variable (hier width) auswerten, also das 
Programm laufen lassen.

von Richard (Gast)


Lesenswert?

Hallo,

für eigene Hinweise und Fehlermeldungen gibt es die 
Präprozessoranweisungen
1
 #warning
 und
1
 #error

Aber das sind eben nur Präprozssoranweisungen, die keinen "Einblick" in 
Variablen haben (wie sollten sie auch). Dafür sind eben die oben 
aufgeführten asserts da. Damit kannst Du zumindest dein Programm 
definiert beenden.

MfG,
Richard

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.