Verhindern, dass C ++ 11 Endlosschleifen entfernt

8

Wie in diese Frage besprochen, optimiert C ++ 11 Endlosschleifen weg.

Aber bei Embedded Devices, die nur einen Zweck haben, sind Endlosschleifen sinnvoll und werden oft verwendet. Sogar ein vollständig leeres while(1); ist nützlich für einen Watchdog-unterstützten Reset. Beenden, aber leere Schleifen können auch in der eingebetteten Entwicklung nützlich sein.

Gibt es eine elegante Möglichkeit, den Compiler ausdrücklich anzuweisen, keine leeren oder Endlosschleifen zu entfernen, ohne die Optimierung vollständig zu deaktivieren?

    
vsz 19.06.2014, 03:30
quelle

1 Antwort

9

Eine der Voraussetzungen für das Entfernen einer Schleife (wie in dieser Frage erwähnt) ist, dass sie

ist
  
  • greift nicht auf flüchtige Objekte zu oder ändert sie nicht
  •   

Also,

%Vor%

sollte den Trick machen, obwohl ich das sicherlich überprüfen würde, indem ich mir die Zerlegung eines Programms ansehe, das mit Ihrer speziellen Toolchain erstellt wurde.

Eine solche Funktion wäre ein guter Kandidat für GCCs noreturn Attribut ebenfalls.

%Vor%     
Jonathon Reinhart 19.06.2014, 03:35
quelle

Tags und Links