Forum: PC-Programmierung QAC 4126, This integral or enum output parameter value is not subsequently checekd


von Chandler B. (chandler)


Lesenswert?

Mahlzeit,
ich mache misra für eine C++ code.
Hier habe ich ein Problem mit einer Warnung.
1
return waitFor([&]() { return ((*MSTPSR[n] & bit) != 0U);}, 100);

Hier bekomme ich die Warnung
"This integral or enum output parameter value is not subsequently 
checked"

Ich weiß was die Warnung bedeutet, also das ein integer (enum gibt es 
hier ja keins) nicht auf Gültigkeit überprüft worden ist. Aber auf 
welchem wert? und vor allem welche Variable?

QAC hilfe
1
  void foo(bool & ref);
2
3
  void f1()
4
  {
5
    bool success;
6
    foo(success);  // Not OK
7
  }
8
  
9
  void f2()
10
  {
11
    bool success;
12
    foo(success);  // OK
13
    if(!success)
14
    {
15
      throw 1;
16
    }
17
  }

also in f2() wird nachher success noch einmal überprüft


in einer header habe ich:
1
volatile uint32_t *MSTPSR[12];
2
volatile uint32_t *_MSTPSR[]   =
3
{
4
    (uint32_t *)0xE6150030, (uint32_t *)0xE6150038, (uint32_t *)0xE6150040, (uint32_t *)0xE6150048,
5
    (uint32_t *)0xE615004C, (uint32_t *)0xE615003C,
6
    (uint32_t *)0xE61501C0, (uint32_t *)0xE61501C4, (uint32_t *)0xE61509A0, (uint32_t *)0xE61509A4,
7
    (uint32_t *)0xE61509A8, (uint32_t *)0xE61509AC
8
};

Welche Variable muss ich hier wo noch auf was überprüfen um die Warnung 
weg zu bekommen?

: Bearbeitet durch User
von Alter Sack (Gast)


Lesenswert?

So sieht sicherheitskritischer Code aus? Holla die Waldfee...

Chandler B. schrieb:
> Hier habe ich ein Problem mit einer Warnung.
>
> return waitFor([&]() { return ((*MSTPSR[n] & bit) != 0U);}, 100);
>
> Hier bekomme ich die Warnung
> "This integral or enum output parameter value is not subsequently
> checked"
>
> Ich weiß was die Warnung bedeutet, also das ein integer (enum gibt es
> hier ja keins) nicht auf Gültigkeit überprüft worden ist. Aber auf
> welchem wert? und vor allem welche Variable?

Also ich denke ja die Warnung hat nichts mit Gültigkeit zu tun, sondern 
mit Nicht-Verwendung.

Aber eigentlich sollte das derjenige wissen der so kritischen Code 
schreib{t|en muss}? ;-)

von Rolf M. (rmagnus)


Lesenswert?

Chandler B. schrieb:
> Ich weiß was die Warnung bedeutet, also das ein integer (enum gibt es
> hier ja keins) nicht auf Gültigkeit überprüft worden ist. Aber auf
> welchem wert? und vor allem welche Variable?

Ich verstehe die Meldung so, dass es darum geht, dass eine 
nicht-const-Referenz an eine Funktion übergeben und nachher mit dem Wert 
nichts gemacht wird. Normalerweise ist ein Referenz-Funktionsparameter 
ja nur dann nicht const, wenn die Funktion damit etwas an den Aufrufer 
zurückgibt.
Möglicherweise geht es hier um das & in der capture-Liste, das alles per 
(eben nicht-const-)Referenz an das Lambda übergibt.
Es scheint, dass in C++ die Möglichkeit von Captures per const-Referenz 
leider fehlt.

von A. S. (Gast)


Lesenswert?

Chandler B. schrieb:
> Aber auf
> welchem wert? und vor allem welche Variable?

na einfach jede Variable (n, bit, das Array) nacheinander durch einen 
festen Wert ersetzen und schauen.

Wer macht die Warnung eigentlich? Und wie sieht sie genau aus?

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.