gccの属性pure
が見つかりました。私のインターフェイスに(const
キーワードとともに)追加の情報を追加するのは良い方法です。その目的を正しく理解していれば、私のコードをより簡単に最適化するためのコンパイラです。純粋な関数が「純粋でない」関数を呼び出した場合、GCCは警告/エラーを発行できますか?
しかし、純粋な関数は、純粋な関数だけを使用できるようにする必要があります。 pure
関数がpure
関数のみを使用していることを確認できるような特定の警告がありますか(さらに、純関数に与えられた関数ポインタ引数も純関数です)。第二のポイントはもっと難しいかもしれない、と私は推測する。
-Wall -Wextra -pedantic-errors
を使用すると、私は警告を発することができませんでした。
私はこれを間違っているかもしれませんが、私はいつも私が明日の朝にそれを忘れないという事実に頼るのではなく、私が適用することを決めた規律を強制することを好む。
編集
Can a compiler automatically detect pure functions without the type information about purity?関連が、それは(私が間違っているかもしれませんが)私の問題は、はるかに簡単であるように思われる:それは開発者に対しによって提供される情報がないと機能が純粋であるかどうかを検出に関するものではありません、内部的に呼び出す関数が同じ方法でマークされていることを確認してください。他の言葉では、呼び出された関数の型チェックを適用することによって、(理論的な)呼び出しスタックを通して "純粋さ"の一貫性をチェックしてください。 GCC documentation(強調鉱山)パー
'int glob = 0; void __attribute __((純))pure(){ \t ++ glob; } int main(){純(); printf( "%d \ n"、glob); } '警告はありませんが、まだ驚くべきことです... –
https://stackoverflow.com/questions/8760956/can-a-compiler-automatically-detect-pure-functions-with-the-type-information – valentin
可能な重複[コンパイラは純度に関する型情報を持たない純関数を自動的に検出できますか?](https://stackoverflow.com/questions/8760956/can-a-compiler-automatically-detect-pure-functions-without-the-type-情報) –