0

私はこれをできる限りシンプルに保つようにしています (関連する質問が実行されていても、これはより一般的なものになるはずです.

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 を使用しています)。#pragmaattribute#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の属性を使用して、シンボルをリンカにグローバルに表示する方法はありますか ( )weakWeakDeclaration.c

4

1 に答える 1