Oracle Solaris Studio 12.2: C ユーザーガイド

2.11.27 weak

#pragma weak symbol1 [= symbol2]

弱い大域シンボルを定義します。このプラグマは主にソースファイルの中でライブラリを構築するために使用されます。リンカーは弱いシンボルを解決できなくてもエラーメッセージを表示しません。


#pragma weak symbol

これは symbol を弱いシンボルとして定義しています。symbol の定義が見つからなくても、リンカーはメッセージ等を出さなくなります。


#pragma weak symbol1 = symbol2

これは symbol1 を、symbol2 の別名である弱いシンボルと定義します。この形式のプラグマは、ソースファイルまたはそこにインクルードされたヘッダーファイルのいずれかで、symbol2 を定義した同じ変換ユニットの中にかぎり使用できます。それ以外で使用された場合は、コンパイルエラーになります。

プログラムが symbol1 を呼び出しますが、それがプログラム中で定義されていない場合には、symbol1 がリンクライブラリ中の弱いシンボルになっていると、リンカーはライブラリにある定義を使用します。しかし、プログラム自身が symbol1 を定義してある場合、プログラムでの定義が優先され、ライブラリに存在する symbol1 の弱い大域定義は使用されません。プログラムが直接 symbol2 を呼び出すと、ライブラリにある定義が使用されます。symbol2 の定義が重複して行われるとエラーになります。