質問

複数のCソースファイルで同じ機能を持たない理由を見つけるのに苦労しています。ヘッダーファイルで宣言されていない限り、別のソースファイルに関数にアクセスできないといつも思っていました。

私が次のことを持っていると仮定しましょう:

main.c-> thread1.h&thread2.hが含まれます

thread1.h-> void * thread1()を宣言します。

thread1.c-> void * thread1(){}を定義し、void lock(){}を定義します

thread2.h-> void * thread2()を宣言します。

thread2.c-> void * thread2(){}を定義し、void lock(){}を定義します

今、GCCは私がそれができないと言っています!

gcc -pthread -wall -o実行可能ファイルmain.c thread1.c thread2.c

エラー:「ロック」の複数の定義

だから今私の質問は次のとおりです。どうすれば自分が欲しいものを達成できますか?

これが不可能であることを意図しているとは思わない。それ以外の場合、すべての多くのCライブラリ内で利用可能なすべてのCソースコードは一意である必要があります。 (いや、意味がないだろうか、それともそうだろうか?)

だから私は約3時間前に解決策がなければならないと思った。ここで何かが足りないに違いない。

さて、私はそれをグーグルで試してみました...しかし、どういうわけか私のGoogleスキルは今回は私を助けませんでした。これを行う方法は本当にありませんか?それとも私はそれを探すために愚かなだけですか?

前もって感謝します、

リープ

役に立ちましたか?

解決

その機能が必要です lock() することが static.

static void lock() {..}

その理由は、その機能です static 「翻訳ユニット」の外には見えません。他の(おそらく間違った)単語では、静的関数は プライベート *.cファイルへ。したがって、現在持っているように、リンク段階でリンクエラーを引き起こしません。

他のヒント

ロックを宣言する必要があります static void lock(){}.

それ以外の場合、機能名がプログラム全体に表示され、名前の衝突が得られます(ただし、関数プロトタイプなしでは呼び出すことはできません)。

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