私はこれをできる限りシンプルに保つようにしています (関連する質問が実行されていても、これはより一般的なものになるはずです.
extern void foo(void)
関数をプロトタイプで宣言し、同じ C ファイルで呼び出す場合weak
、別の C ファイルで属性を指定できますか?
その理由は次のとおりです。extern
関数foo()
が実装されるかどうかは、いくつかのビルド オプションに依存し、バイナリに追加される場合とされない場合があります。そうでない場合は、(明らかに) エラーが発生しますundefined reference
。これが、私がそれを弱いと宣言したい理由です(with __attribute__((weak))
from GCC または with 。何らかの理由で(ここで説明するには長い)、元の宣言に/を#pragma weak
追加せずに、別の C ファイルでこれを行いたいですか? - ありますか?とにかくこれを行うには?別の C ファイルに追加するだけでは機能しません (私は GCC 4.8.1 を使用しています)。#pragma
attribute
#pragma weak foo
//編集: 要求に応じていくつかのコード: 注: の実装はfoo
プロジェクトにリンクされていません
Function.c
extern void foo(void);
// #pragma weak foo <-- If I add it here, it links without problems
void bar(void)
{
foo();
}
WeakDeclaration.c
#pragma weak foo <-- If I add it here, I get undefined reference error
//編集2:
わかりましたので、もう少し質問を指定してみます。別の C ファイル内foo
の属性を使用して、シンボルをリンカにグローバルに表示する方法はありますか ( )weak
WeakDeclaration.c