2

弱いリンクはどのくらいポータブルですか?

#pragma weak my_symbol

私はその質問を見ます: how-to-make-weak-linking-work-with-gccはそれを機能させる方法を議論します。しかし、gccが不要になるようにこれを行う良い方法はありますか?

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

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif
4

1 に答える 1

13

#pragma定義上、移植性はありません。

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

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

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

于 2009-09-11T13:21:57.157 に答える