質問

弱いリンクはどの程度移植性がありますか?

#pragma weak my_symbol

その質問が表示されます: how-to-make-weak- linked-work-with-gcc では、それを機能させる方法について説明しています。しかし、gccが不要になるようにこれを行う良い方法はありますか?

ウィークリンクと#ifdefによる宣言の保護の違いは何ですか?

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif
役に立ちましたか?

解決

#pragma は、定義により、ポータブルではありません

そして、弱いリンクはリンク時に行われます(驚くほど十分です)。同じシグネチャを持つ関数(または実際には任意のシンボル)が別のシグネチャをオーバーライドできます。つまり、弱いものよりも強いものが優先的に選択されますが、強いものがない場合は弱いものが使用されます。

インクルードガードは、リンカーではなくコンパイラによって実行されます。強力なガードがない場合、弱いガードへのフォールバックを許可しません 。両方の関数のソースを制御する場合(一方を ifdef -ingで、他方を ifndef -ingで)同じ動作をシミュレートできますが、常にそうであるとは限りません。これは、2つの強力な機能から選択することです。

弱いリンクを使用すると、デバッグを目的として独自の malloc()/ free()をドロップインするなど、それらを提供するライブラリとリンクすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top