unsequenced Änderung und Zugriff auf den Zeiger

8

Ich erhalte eine Warnung für diesen C-Ausdruck:

%Vor%

Die Warnung lautet:

%Vor%

Ich denke, der Ausdruck sollte so geändert werden:

%Vor%

Wird das Verhalten (nach der Änderung) wie beabsichtigt aussehen? Ich würde denken, dass die Zeigerzunahme geschehen sollte, nachdem der Wert, auf den durch p0 gezeigt wird, aktualisiert worden ist.

    
user1884325 14.08.2015, 19:40
quelle

1 Antwort

14

Das oben bereitgestellte Snippet ruft nicht definiertes Verhalten auf. Gemäß C-Norm

C11: 6.5 Ausdrücke:

  

Wenn ein Nebeneffekt auf ein Skalarobjekt relativ zu nicht sequenziert ist, wird entweder ein anderer Nebeneffekt für dasselbe Skalarobjekt oder eine Wertberechnung mit dem Wert desselben Skalarobjekts , das Verhalten ist nicht definiert. Wenn es mehrere zulässige Ordnungen der Teilausdrücke eines Ausdrucks gibt, ist das Verhalten undefiniert, wenn solch ein nicht-sequenzierter Nebeneffekt in irgendeiner der Reihenfolgen auftritt. 84 .

Im Ausdruck *p0++ = mult(*p0, psign[i1]) wird die Änderung in p0 auf der linken Seite des Zuweisungsoperators nicht vor oder nach der Verwendung von p0 auf der rechten Seite des Ausdrucks sequenziert. Daher das Snippet

%Vor%

entspricht nicht

%Vor%     
haccks 14.08.2015, 19:48
quelle

Tags und Links