誰でも次の関数宣言を説明できますか?
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
誰でも次の関数宣言を説明できますか?
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
always_inline
およびpure
はgcc
関数属性です。gccドキュメントから:
always_inline
通常、最適化が指定されていない限り、関数はインライン化されません。インラインで宣言された関数の場合、この属性は、インライン化に適用される制限に関係なく、関数をインライン化します。このような関数をインライン展開しないと、エラーと診断されます。そのような関数が間接的に呼び出される場合、コンパイラは最適化レベルに応じてインライン化する場合としない場合があり、間接呼び出しのインライン化の失敗が診断される場合と診断されない場合があることに注意してください。
MY_FUNC
関数には既にinline
関数指定子がありますが、C ではinline
インライン化の提案に過ぎず、コンパイラーは関数をインライン化する義務を負いません。
ピュア
多くの関数は戻り値以外には影響を与えず、それらの戻り値はパラメーターやグローバル変数のみに依存します。このような関数は、算術演算子と同様に、一般的な部分式の削除とループの最適化の対象となります。これらの関数は属性 pure で宣言する必要があります。
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
inline
-- 最適化のヒントとして、またはリンクの目的で、インラインで宣言された関数。uint64_t
-- 固定幅の戻り型。を参照してください<stdint.h>
。MY_FUNC
-- 関数名unsigned long
-- パラメータのタイプparam
-- パラメータの名前__attribute__ ((pure, always_inline))
-- GCC コンパイラ固有の属性。忍者の説明を参照してください。「広すぎる」として締めくくるための投票。