Warum ist volatile
in C benötigt? Wofür wird es verwendet? Was wird es tun?
Antworten
Zu viele Anzeigen?Eine flüchtige Variable kann von außerhalb des kompilierten Codes geändert werden (z. B. kann ein Programm eine flüchtige Variable einem im Speicher abgebildeten Register zuordnen). Der Compiler wird bestimmte Optimierungen nicht auf Code anwenden, der eine flüchtige Variable behandelt - zum Beispiel wird er sie nicht in ein Register laden, ohne sie in den Speicher zu schreiben. Dies ist wichtig für den Umgang mit Hardware-Registern.
Wie von vielen hier zu Recht vorgeschlagen, wird das Schlüsselwort volatile häufig verwendet, um die Optimierung der flüchtigen Variablen zu überspringen.
Der beste Vorteil, der mir in den Sinn kommt und der nach der Lektüre von "Volatile" erwähnenswert ist, besteht darin, dass zurückdrehend der Variablen im Falle einer longjmp
. Ein nichtlokaler Sprung.
Was bedeutet das?
Es bedeutet einfach, dass der letzte Wert beibehalten wird, nachdem Sie Stapelabwicklung um zu einem früheren Stack-Frame zurückzukehren; typischerweise im Falle eines fehlerhaften Szenarios.
Da es den Rahmen dieser Frage sprengen würde, gehe ich nicht auf Einzelheiten ein setjmp/longjmp
hier, aber es lohnt sich, darüber zu lesen; und wie die Volatilitätsfunktion verwendet werden kann, um den letzten Wert beizubehalten.
- See previous answers
- Weitere Antworten anzeigen