-3

誰でも次の関数宣言を説明できますか?

inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline)); 
4

2 に答える 2

2

always_inlineおよびpuregcc関数属性です。gccドキュメントから:

always_inline

通常、最適化が指定されていない限り、関数はインライン化されません。インラインで宣言された関数の場合、この属性は、インライン化に適用される制限に関係なく、関数をインライン化します。このような関数をインライン展開しないと、エラーと診断されます。そのような関数が間接的に呼び出される場合、コンパイラは最適化レベルに応じてインライン化する場合としない場合があり、間接呼び出しのインライン化の失敗が診断される場合と診断されない場合があることに注意してください。

MY_FUNC関数には既にinline関数指定子がありますが、C ではinlineインライン化の提案に過ぎず、コンパイラーは関数をインライン化する義務を負いません。

ピュア

多くの関数は戻り値以外には影響を与えず、それらの戻り値はパラメーターやグローバル変数のみに依存します。このような関数は、算術演算子と同様に、一般的な部分式の削除とループの最適化の対象となります。これらの関数は属性 pure で宣言する必要があります。

于 2014-12-19T13:16:16.423 に答える
0
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 コンパイラ固有の属性。忍者の説明を参照してください。

「広すぎる」として締めくくるための投票。

于 2014-12-19T13:18:15.260 に答える