Forum: PC-Programmierung Lint - Misra Fehler


von gerd43 (Gast)


Lesenswert?

Folgender Fehler bringt mit LINT und ich finde dein Fehler einfach 
nicht:

Prohibited Impliciti Conversion: Signed versus Unsigned

bei folgender Zeile:

Extern Array[0] =
{
 { TASTATUR,  TASTEN  ,aSpeicherzahl }
};

Tastatur und Tasten sind Define sSpeicherzahlt ist ein Array.

von Karl H. (kbuchegg)


Lesenswert?

gerd43 wrote:
> Folgender Fehler bringt mit LINT und ich finde dein Fehler einfach
> nicht:
>
> Prohibited Impliciti Conversion: Signed versus Unsigned
>
> bei folgender Zeile:
>
> Extern Array[0] =
> {
>  { TASTATUR,  TASTEN  ,aSpeicherzahl }
> };

Es ist kein Datentyp angegeben. Daher treten Standardannahmen in Kraft
die besagen, dass Array vom Typ int ist (und ich vermute mal, du hast
irgendwo anders eine andere Definition für Array, wo das ein
unsigned int ist. Die andere Möglichkeit wäre, das irgendeines
von TASTATUR, TASTEN oder aSpeicherzahl ein unsigned Datentyp ist)

Die Angabe einer 0-Größe für das Array ist wohl ziemlich sinnfrei.
Ausserdem stimmt sie nicht mit der Anzahl der Initialisierungen
überein

Dir ist hoffentlich auch klar, dass durch die Angabe einer
Initialisierung das 'extern' keine Wirkung mehr hat. Das ist eine
Definition und keine Deklaration mehr.

Die zusätzlichen {} - Klammern in deiner Initialisierung verleiten
mich allerdings zu der Annahme, dass du wieder mal nicht den Code
gepostet hast, so wie er in deinem Programm steht, sondern einen
anderen. Sieht zwar ähnlich aus, aber ist dann doch was ganz anderes.

von gerd43 (Gast)


Lesenswert?

Besten dank für die Antwort und Klasse wie hier einem geholfen wird.

SHerleitung Array[1] =
{

{ TASTATUR,  TASTEN  ,aSpeicherzahl },
{ TASTATUR1,  TASTEN1  ,aSpeicherzahl1 }

};



es sieht so aus:
SHerleitung Array[1]

typedef struct
{
   Uint X;
   Uint Y;
   Uint *Z;
} SHerleitung;

von Karl H. (kbuchegg)


Lesenswert?

gerd43 wrote:
> Besten dank für die Antwort und Klasse wie hier einem geholfen wird.
>
> SHerleitung Array[1] =
> {
>
> { TASTATUR,  TASTEN  ,aSpeicherzahl },
> { TASTATUR1,  TASTEN1  ,aSpeicherzahl1 }
>
> };
>

Hmm. In mir keimt ein Verdacht.
Kann es sein, dass du die Angabe der Dimensionierung bei einem
Array noch nicht richtig verstanden hast?
Dort wird angegeben, wieviele Elemente das Array umfassen soll
und nicht welches der höchste Index ist.
Ein Array    SHerleitung Array[1]   besteht aus einem Element,
welches den Index 0 trägt.

Obiges kann also so nicht stimmen, da du 2 Initialisierungen
hast, dein Array aber nur 1 Element groß ist.

Lass doch die Anzahl der benötigten Array Elemente den Compiler
selbst ausrechnen. Der braucht nur die Initialisierungen abzuzählen
und weiß dann, wie gross das Array sein muss:

SHerleitung Array[] =
{
  { TASTATUR,  TASTEN  ,aSpeicherzahl },
  { TASTATUR1,  TASTEN1  ,aSpeicherzahl1 }
};

Das aber nur nebenbei.

> typedef struct
> {
>    Uint X;
>    Uint Y;
>    Uint *Z;
> } SHerleitung;


OK. Also alles unsigned.

Welches sind die Datentypen für TASTATUR, TASTATUR1, TASTEN, TASTEN1
aSpeicherzahl und aSpeicherzahl1?

von gerd43 (Gast)


Lesenswert?

TASTATUR und 1 = (unsigned short int)
TASTEN und 1 = Define dem hinterlegt ist   0u

von madler (Gast)


Lesenswert?

Wenn solche Fehler kommen, ist es wichtig genau den Datentyp aller 
Variablen zu überprüfen.
Dazu musst Du aber noch mehr Infos liefern:
Datentyp von aSpeicherzahl, aSpeicherzahl1
Datentyp von TASTATUR etc. dh. als was sind die defined ?
mit dem define ist das ein bißchen tricksig, am besten hängt man an den 
Wert sowas wie U für unsigned int an.

PS: hmm der Herr Buchegger war schneller ;)

von madler (Gast)


Lesenswert?

Und aSpeicherzahl, aSpeicherzahl1 ?

von gerd43 (Gast)


Lesenswert?

die Speicherzahlen sind (unsigned short int)

von madler (Gast)


Lesenswert?

Hmm abgesehen davon, dass es manchmal "Uint" (ist das irgendwo als 
unsigned short int definiert?) und manchmal "unsigned short int" heisst, 
wüsste ich jetzt nicht wo der Fehler herkommen sollte.
Gibt es vielleicht lokale Variablen gleichen Namens ? Array ist ja auch 
kein sehr aussagekräftiger Name ;)

von gerd43 (Gast)


Lesenswert?

Uint ist definiert als (unsigned short int)

von Karl H. (kbuchegg)


Lesenswert?

gerd43 wrote:
> TASTATUR und 1 = (unsigned short int)
> TASTEN und 1 = Define dem hinterlegt ist   0u

Und das ganze jetzt bitte nochmal im deutschen Satz.
Oder noch besser: im originalen Code.

Irgendwo hast du einen Mismatch zwischen signed und unsigned.
Dem musst du nachgehen. Aber mit den Ausschnitten die wir
hier zu sehen kriegen, kann man das von hier aus nicht
beurteilen.

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.