2017-11-28 9 views
1

Ich habe das GCC-Attribut pure entdeckt und mag es, es zu verwenden, da es mir eine gute Möglichkeit scheint, zusätzliche Informationen in meiner Schnittstelle hinzuzufügen (neben dem const Schlüsselwort), und wenn ich seinen Zweck richtig verstanden habe, wird mein erlauben Compiler, um meinen Code mit mehr Leichtigkeit zu optimieren.Kann GCC eine Warnung/einen Fehler ausgeben, wenn eine reine Funktion eine "nicht reine" Funktion aufruft?

Aber es scheint mir auch, dass eine reine Funktion nur in der Lage sein sollte, Funktionen zu verwenden, die selbst rein sind. Gibt es eine bestimmte Warnung, die aktiviert werden kann, um zu überprüfen, dass pure Funktionen nur pure Funktionen verwenden (und außerdem, dass Funktionszeiger, die reinen Funktionen übergeben werden, auch reine Funktionen sind)? Der zweite Punkt könnte komplizierter sein, nehme ich an.

Mit -Wall -Wextra -pedantic-errors konnte ich keine Warnung auslösen.

Vielleicht tue ich das falsch, aber ich bevorzuge es immer, dass meine Werkzeuge die Disziplin durchsetzen, die ich beschlossen habe, anstatt nur darauf zu zählen, dass ich es morgen früh nicht vergessen werde.

bearbeiten

Can a compiler automatically detect pure functions without the type information about purity? ist verwandt, aber es scheint mir, dass mein Problem viel einfacher ist (obwohl ich könnte falsch sein): es geht nicht darum, Erfassen, ob eine Funktion ohne diese Information durch die developper vorgesehen ist rein, Prüfen Sie jedoch, ob die intern aufgerufenen Funktionen genauso markiert sind. In anderen Worten, überprüfen Sie die Konsistenz in "Reinheit" durch den (theoretischen) Aufruf-Stack, indem Sie irgendeine Art von Typprüfung auf die aufgerufenen Funktionen anwenden.

+0

'int glob = 0; void __Attribut __ ((rein)) rein() { \t ++ glob; } int main() {pure(); printf ("% d \ n", glob); } 'hat keine Warnung, ist aber immer noch überraschend ... –

+0

https://stackoverflow.com/questions/8760956/can-a-compiler-automatisch-detect-pure-functions-without-the-type-information – valentin

+0

Mögliche Duplikate von [Kann ein Compiler automatisch reine Funktionen ohne Typinformationen über Reinheit erkennen?] (https://stackoverflow.com/questions/8760956/can-a-compiler-automatisch-detect-pure-functions-without- the-type- Information) –

Antwort

0

Pro der GCC documentation (Hervorhebung von mir):

6,31 Deklarieren Attribute von Funktionen

In GNU C, Sie Funktionsattribute können bestimmte Dinge über Funktionen genannt zu erklären in Ihrem Programm, die dem Compiler helfen, Anrufe zu optimieren ...

Wenn Sie erklären, dass eine Funktion pure ist, Sie sind informieren der Compiler, dass es bestimmte Annahmen über diese Funktion machen.

Wie in den Kommentaren angegeben: "Wenn der Compiler es herausfinden könnte, warum sollten Sie das Attribut überhaupt verwenden?"

Verwandte Themen