Ich habe gesehen, Produktionscode, der richtig ist, aber so kompliziert, dass es den Optimierer in die Herstellung falscher Ausgabe verwirrt. Dies könnte der Grund sein, Optimierungen abzuschalten.
Allerdings würde ich es viel wahrscheinlicher halten, dass der Code einfach fehlerhaft ist und Undefined Behavior hat. Der Optimierer stellt dies offen und führt zu falschem Laufzeitverhalten oder Abstürzen. Ohne Optimierungen passiert es, dass der Code "funktioniert". Und anstatt das zugrunde liegende Problem zu finden und zu entfernen, "reparierte" jemand es, indem es Optimierungen deaktivierte und es dabei beließ.
Natürlich ist das ungefähr so zerbrechlich und Workarounds können. Neue Hardware, neuer Betriebssystem-Patch, neuer Compiler-Patch, jeder dieser kann einen solchen "Fix" brechen.
Auch wenn das Pragma aus dem ersten Grund da ist, sollte es stark dokumentiert werden.
Vielleicht mochte der Programmierer eine zuverlässige Stack-Trace, wenn das Programm bombardiert. Vielleicht hat er versucht, einen Codeoptimierer zu umgehen. Vielleicht wusste er nicht, was er tat, und wandte sich dem Frachtkult zu. –
Ein anderer Grund wäre, die resultierende Binärdatei zu verschleiern. Reverse Engineering schwieriger zu machen (natürlich, wenn der Quellcode offen ist, ist dies sinnlos). – freakish