PC-Lint Fehlermeldung

Gast #2653016
Lesenswert?

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?
#2653043
Lesenswert?

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.
Moderator Persönliche Seite #2653045
Lesenswert?

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".
Gast #2653068
Lesenswert?

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.
Gast #2653463
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren