Lint - Misra Fehler

#866808
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.
Gast #866828
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;
#866836
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?
Gast #866848
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 ;)
Gast #866876
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 ;)
#866902
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.

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