Ich bekomme von PC-Lint die folgende Fehlermeldung: Error 40: Undeclared identifier 'var' [MISRA 2004 Rule 1.2, required] ------------------------------------------------------------------------ - datei_1.c: int var; /*globale variable*/ ------------------------------------------------------------------------ - datei_1.h: #ifndef datei_1_h #define datei_1_h extern int var; #define MACRONAME(){\ var=1;\ } #endif ------------------------------------------------------------------------ - datei_2.c: #include "datei_1.h" funktion() { MACRONAME(); } ------------------------------------------------------------------------ - Der Keil Compiler übersetzt das problemlos. Keine Ahnung warum PC-Lint 9.0 hier meckert. Kann mir da jemand helfen?
Ist das wirklich exakt so geschrieben? Du hast hier ja nur einen Exzerpt oder gar ein Gedächtnisprotokoll gepostet, nicht, daß Du in Deinen tatsächlichen Sourcen vielleicht doch einen Tippfehler hast ...
1. Ich sehe da auch nichts, was lint anzumeckern hätte. 2. Nicht jede lint-Warnung ist sinnvoll. 3. Nicht jede MISRA-Regel ist sinnvoll. 4. Wozu das schusselige Makro-Gegurke? Das verwirrt lint ebenso wie jeden normal denkenden Leser. Wer so programmiert, kommt mit lint auch nicht viel weiter.
Decius schrieb: > Der Keil Compiler übersetzt das problemlos. Keine Ahnung warum PC-Lint > 9.0 hier meckert. Kann mir da jemand helfen? Wirfst Du dem pclint die Sources in einem Rutsch zum Fraß vor oder einzeln? Soweit ich das in Erinnerung habe, solltest Du pclint alle Sources auf einmal angeben, also z.B. pclint datei_*.c Dann kann er auch die Definition der Variablen in datei_1.c "sehen".
Ich weiß, der originale Quelltext wäre besser. Da das aber keine Hausaugfgabe ist, kann ich nicht so vorgehen. Den originalen Quelltext habe ich aber auf meinen 2. Monitor gesehen, als ich dies geschrieben habe. Aufgrund der Art und Weise wie PC-Lint von Keil uVision 4.50 unterstützt wird, kann ich entweder alle Dateien oder jede Datei einzeln überprüfen lassen. Bisher habe ich die Dateien einzeln bearbeitet. Aber es wäre schon möglich, das die Definition der Variable var in datei_1.c, so nicht berücksichtigt wird. Denn wenn ich diese Definition nach datei_2.c kopiere, ist der Fehler weg. Ich bin auch kein Freund von MACROS, ich hätte da lieber ein inline Funktion. Nur was soll man machen, wenn man vorhandenen Quelltext weiterbearbeiten muß?! Ich muß mir das mal anschauen, ob es vertretbar ist den gesamten Quellcode zu ändern. Aber wahrscheinlich eher nicht, da es ein größeres Projekt ist.
Lucius schrieb: > Aber wahrscheinlich eher nicht, da > es ein größeres Projekt ist. Dann erst recht :-)
Ok bin zwar noch nicht 100%ig sicher, aber alle Dateien überprüfen zu lassen, war anscheinend die Lösung. Aber noch eine andere Frage. Im Moment habe ich das Problem das ich im folgenden Konstrukt mit dem pclint beim #error lande. #if defined (__ARMCC_VERSION) . . . #else #error "Directives unknown!" #endif Beim error bricht pclint dann ab. Ich weiß man kann mit "+fce" pclint veranlassen weiterzuarbeiten. Oben ist also __AMRCC_VERSION "nicht definiert". Jedenfalls sieht es anscheinend für pclint so aus, da es sich hier um eine Compilerdirektive handelt. wie bringe ich pclint bei, Compilerdirektiven als definiert anzusehen?
die beiden führenden Unterstriche sind ein klares Signal, dass es sich bei __ARMCC_VERSION um ein vom Compiler selbst bereit gestelltes Makro handelt. Musst du halt die Doku vom pclint durchsuchen, wie du dem auf der Command Line ein paar define-ments mitgeben kannst.
Habe da im Moment an "+ppw(__ARMCC_VERSION)" gedacht. Funktioniert aber nicht.
Die Zahl stellt die Version des Compilers dar. Das Format der Zahl ist so. P V B B B B - - ------- | | |----- Build | |---------- Minor version |------------ Major version
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.