2017-11-28 23 views
1

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(強調鉱山)パー

+0

'int glob = 0; void __attribute __((純))pure(){ \t ++ glob; } int main(){純(); printf( "%d \ n"、glob); } '警告はありませんが、まだ驚くべきことです... –

+0

https://stackoverflow.com/questions/8760956/can-a-compiler-automatically-detect-pure-functions-with-the-type-in​​formation – valentin

+0

可能な重複[コンパイラは純度に関する型情報を持たない純関数を自動的に検出できますか?](https://stackoverflow.com/questions/8760956/can-a-compiler-automatically-detect-pure-functions-without-the-type-情報) –

答えて

0

:GNU Cの関数

の属性を宣言

6.31、あなたは関数が関数についての特定の物事に と呼ばれるを宣言するために属性を使用することができますコンパイラを助けるプログラムで 呼び出しを最適化する...

あなたは関数がpureであることを宣言場合は、あなたはは、それがその機能について一定の仮定を行うことができますコンパイラを知らせるあります。

コメントに記載されているとおり:「コンパイラがそれを理解できれば、なぜその属性を使用する必要がありますか?」

関連する問題