PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Syntax Überprüfung



HermannSW
24.04.2007, 00:19
Hallo,

motiviert durch den menschlichen C-Syntax-Checker :) in folgendem Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=275095#275095) fragte ich mich, mit welchen Tools (und wie) man die C-Syntax von Asuro-Programmen automatisch überprüfen lassen kann.

Als Ergebnis entstand der Artikel C-Syntax Überprüfung (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/CSyntaxCheck) in der Rubrik Programmierung (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Programmierung) auf dem AsuroWiki (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/HomePage).

Ich hoffe, dieser Artikel kann bei kniffligen Problemen helfen ...

_HP_
24.04.2007, 10:25
Hallo Hermann,

danke für den Tipp.

Liegt es an dem zu einfachen Beispiel, oder denke ich schief - aber ich bekomme diese Fehler schon vom Compiler angezeigt:



test.c: In function 'main':
test.c:5: warning: suggest parentheses around assignment used as truth value
test.c:6: warning: statement with no effect


... und wenn man in Eclipse programmiert, dann bekommt man die fehlerhaften Zeilen auch noch unterstrichen:

HermannSW
25.04.2007, 23:25
Hallo _HP_,

Hallo Hermann,

danke für den Tipp.

Liegt es an dem zu einfachen Beispiel, oder denke ich schief - aber ich bekomme diese Fehler schon vom Compiler angezeigt:
...da hast Du natürlich Recht, zuerst sollte man mittels avr-gcc -Wall ... schauen, was der Compiler so von sich gibt. Wenn man da nicht fündig wird, und trotzdem noch komisches Verhalten im Programm hat, kann ja mit splint weitermachen.

Ich habe mal die Dateien der Asurolib unter die Lupe genommen, und unter den unheimlich vielen (wahrscheinlich) harmlosen Meldungen zumindest zwei gefunden, welche nicht bei avr-gcc -Wall ... reported werden: In diesem Fall brennt nichts an wegen AND mit 0x00, aber da sollte besser eine Zuweisung stehen ...
...
lcd.c:117:3: Variable dataPins used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)
...

==============================================
...
void SetDataLCD(unsigned char data)
{
unsigned char dataPins; // Pin Compatibility

// Set First Nibble Data to DataPins on PCF8574
dataPins &= 0x00; <<<---- Zeile 117
dataPins |= ((data & 0x80) >> 7) << LD7;
dataPins |= ((data & 0x40) >> 6) << LD6;
dataPins |= ((data & 0x20) >> 5) << LD5;
dataPins |= ((data & 0x10) >> 4) << LD4;
...
============================================== Unreachable Code in Form des return 0; in main() nach dem while (1); sind wir ja gewohnt, aber in PCDemo hat sich da noch eine Stelle eingeschlichen:

...
PCDemo.c: (in function PCDemo)
PCDemo.c:147:7: Unreachable code: break
This code will never be reached on any possible execution. (Use -unreachable
to inhibit warning)
...

============================================
...
switch (cmd)
{
case RWD_KEY :
PCRwd();
break;
case FWD_KEY :
PCFwd();
break;
case LEFT_KEY :
PCLeft();
break;
case RIGHT_KEY :
PCRight();
break;
case STOP_KEY :
PCStop();
break;
case ESC_KEY :
return;
break; <<<--- Zeile 147
}
...
============================================