プログラミング言語:Cインライン関数は弱い記号を作成しますか?
私たちの仕事では、ヘッダーファイルheader1.hを持つプロジェクトがあります。このファイルには、(externを介して)外部スコープとして宣言され、同じヘッダファイル(header1.h)内でインラインとして定義された関数がいくつか含まれています。
このファイルは、異なるCファイルのいくつかの場所に含まれています。 GCCでの過去の経験で、複数の定義のエラーが発生することを理解しています。これが私が期待しているものです。しかし、私たちの仕事では、これらのエラーは発生しません。異なるのは、異なるコンパイラドライバを使用している点だけです。
私の過去の経験から、私が作っている最良の推測は、コンパイル時にシンボルが弱いシンボルとして生成され、リンカがその情報を使ってそれらの1つを選択していることです。
インラインとして定義された関数は、弱い記号になりますか?それが可能なのか、それとも別の理由があるかもしれません。
また、インラインで弱いシンボルが作成される場合は、それをオフまたはオンにする機能があります。
いいえ、弱いシンボルはGNU拡張であり、 AFAIKでも定義されていません。 'inline'関数は特別なセマンティクスを持っています。スタックオーバーフローについてはここで調べることができます。 – Downvoter
@Downvoter弱い記号は[ELF標準](https://en.wikipedia.org/wiki/Weak_symbol)の一部です:*弱い記号は、実行可能ファイルとリンク可能な形式(ELF)のオブジェクトファイルをリンクする際に特別に注釈を付けた記号を示します。 ... * –
@AndrewHenleもちろん、私はCの標準を意味する、私はそれを書くのを忘れました。 ELF標準の一部であるため、GNU固有の拡張ではありませんが、標準とは独立して実装定義されています。 – Downvoter